in reply to "$_" vs. $_
Your problem is that you didn't localize $_ in the sub. As a result, the $_ from the outside world is changed. And since parameters are passed by reference, your parameter is changed after you passed it in. "$_" passes a copy, so that one doesn't change.
As a fix, which IMO is much less interesting than the phenomenon we just witnessed, you can localize the change by
orsub foo { while (@_) { local $_ = shift; $params->{$_} = shift; } print "$_: $params->{$_}\n", for keys %$params; }
sub foo { local $_; while (@_) { $_ = shift; $params->{$_} = shift; } print "$_: $params->{$_}\n", for keys %$params; }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: "$_" vs. $_
by holli (Abbot) on Apr 07, 2007 at 21:05 UTC | |
Re^2: "$_" vs. $_
by argv (Pilgrim) on Apr 07, 2007 at 19:56 UTC | |
by blazar (Canon) on Apr 08, 2007 at 11:09 UTC |
In Section
Seekers of Perl Wisdom