in reply to pass by value vs reference and return by value
As to return by value, an example:
#!/usr/bin/perl use 5.016; use warnings; use Data::Dumper; # pass by ref; return by val my $foo = "abc"; sub subr { my $local_foo = shift; # see Note1, below my $local_deref = $$local_foo; say " In sub, \$local_deref: $local_deref"; $local_deref .= " def"; say "\t And now, after cat, \$local_deref: $local_deref"; return $local_deref; } my $fooref = \$foo; my $result = subr($fooref); say "\t\t Back in main, after subr has returned."; say "\t\t $result";
Produces output:
In sub, $local_deref: abc And now, after cat, $local_deref: abc def Back in main, after subr has returned. abc def
Note1: Had you attempted to -- for example -- print "DEBUG: \$local_foo: $local_foo"; before the deref you would be advised:
DEBUG: $local_foo: SCALAR(0x169ef64)... where the hex value (address) will vary with machine, OS or, possibly, whether the butterfly's wings are flapping upward or downward in the jungles or Borneo.
|
|---|