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.
In reply to Re: pass by value vs reference and return by value
by ww
in thread pass by value vs reference and return by value
by ganeshPerlStarter
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |