in reply to Access a global variable from a subroutine when used as "for" iterator
Hi vitoco. I'm afraid you have unwittingly sewn great confusion with your question. Usually when we speak of an "iterator" we mean an object (rather than a simple variable) that is used to return some result each time it is used. Very often this is achieved using things called "closures" which is why there has been all this talk of closures in most of the answers you received. Closures are very strange things until you understand them. Let me show you:
use strict; use warnings; use feature 'say'; my $it = MakeCounter(); say $it->() for 1 .. 3; sub MakeCounter { my $count = 0; return sub {return ++$count;}; }
Prints:
1 2 3
Each time MakeCounter is called a new $count variable is created. The anonymous sub that is returned then holds on to and uses that specific instance of $count. The anonymous subroutine "closes" over the $count variable. The thing being closed over need not be a simple scalar variable. Often it will be an array or hash or file handle or database statement handle or even an iterator.
This doesn't help solve your problem, but maybe helps understand where the "closure" comments are coming from.
The more usual term for the variable used in a for loop (both Perl and C types) is "loop variable".
|
|---|