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(...).