or if not actually modifying the contents of the hash inside the sub...use strict; use warnings; my %hash = (1,'a',2,'b',3,'c'); print $hash{2}; mysub(\%hash); print $hash{2}; sub mysub { my $p = shift; print $p->{2}; $p->{2} = 'd'; }
You pass by reference in the second case too, so that if you wanted to pass multiple arguments after the hash, you wouldn't have problems determining where the hash ended and the next argument began - which you would if you passed the contents of the hash. I'm sure there are ways to get around this problem using sub definitions instead, but that way of doing things would lack elegance imho.use strict; use warnings; my %hash = (1,'a',2,'b',3,'c'); mysub(\%hash); sub mysub { my %h = %{shift()}; print $h{2}; }
In reply to Re: Pass By Reference Inner Workings - Magic scalar operator
by TedPride
in thread Pass By Reference Inner Workings - Magic scalar operator
by geekondemand
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |