Domanda

How can the SOCKET recv function modify the value of the scalar $PDU directly? Usually this syntax is a pass by value not a pass by reference, I assumed up to now at least.

my $PDU; 
my $addr = $socket->recv($PDU, MAXBYTES);

I want to use this effect for my own purpose so best would be a handy test subroutine which depicts how this can be achieved.

Like:

my $PDU="orig";
sub test {
  my $par1=shift;
  $par1="test";
}
print "$PDU\n";

As you know this will result into "orig" not "test".

Thank you in advance.

Kind regards, Hermann

È stato utile?

Soluzione

Your function should be well documented when having such behavior,

my $PDU="orig";
sub test {
  $_[0] = "test";
}

test($PDU);
print "$PDU\n";

or

sub test {
  my ($par1) = map \$_, @_;

  $$par1 = "test";
}

output

test
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top