Global variables are global, and @_ are aliases. This is easily replicated and tested with the following code (your while loop will never terminate so I used a for loop instead):
#!perl -w use strict; use Data::Dumper; my @someNameArray = qw(foo bar baz); print Dumper \@someNameArray; for(@someNameArray){ print( "Before: $_\n" );# $_ correct frobnicate($_); print( "After : $_\n" );# $_ changed } print "Final:\n"; print Dumper \@someNameArray; sub frobnicate { $_[0] = "changed value from '$_[0]'"; }; __END__ $VAR1 = [ 'foo', 'bar', 'baz' ]; Before: foo After : changed value from 'foo' Before: bar After : changed value from 'bar' Before: baz After : changed value from 'baz' Final: $VAR1 = [ 'changed value from \'foo\'', 'changed value from \'bar\'', 'changed value from \'baz\'' ];
If you
I suggest to use a lexical iterator instead of $_, and don't have your callees change elements in @_. Using a lexical iterator prevents action at a distance from called subroutines. Using @_ will need more changes and information about $finder->isExist(...).
In reply to Re: Does perl sub using stack and possible to crash?
by Corion
in thread Does perl sub using stack and possible to crash?
by anaconda_wly
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |