Using my on for/foreach loop variables is not merely making explicit the implicit localization that is provided by the loop: the new lexical variable is distinct from any variable of the same name (lexical or not) in the surrounding scope.
Note the difference in the following example:
#!/usr/bin/perl
use strict;
use warnings;
use vars qw($n);
$n = "global";
sub foo {
my $x = shift;
print "$x, $n\n";
}
foreach $n (0..2) {
foo($n);
}
print "\$n = $n\n";
foreach my $n (0..2) {
foo($n);
}
print "\$n = $n\n";
Which produces:
0, 0
1, 1
2, 2
$n = global
0, global
1, global
2, global
$n = global
After both foreach loops the global $n remains unchanged but within the first (my not used) the global is affected while within the second (my is used) the global is not affected.
|