vitoco has asked for the wisdom of the Perl Monks concerning the following question:
I got an unexpected behavior in the value of a global variable used as an iterator in a "for" loop: It's current value is not accesible from a subroutine called on each iteration.
#!perl use strict; use warnings; my $i = 0; for $i (1 .. 3) { show(); } sub show { print "$i\n"; }
I was expecting 1 2 3, but got 0 0 0 !!!
If I add a "my" in the "for" loop, I am saying that the new $i variable has it's own scope, and I understand that the sub cannot see it, but without a "my" in the "for", shouldn't the scope of $i be the same everywhere?
If I don't declare and initialize the $i variable, I get an error unless I also add a "my" in the "for" loop. That says it is the same variable. Why to add an extra scope to it during runtime?
A workaround is to declare another iterator variable in the "for" and assign it to $i as the first step in the loop...
|
|---|