Welcome to the Monastery | |
PerlMonks |
Re: evaluation strategy of perlby dreadpiratepeter (Priest) |
on Sep 20, 2002 at 14:27 UTC ( [id://199481]=note: print w/replies, xml ) | Need Help?? |
What you have inadvertantly created is called a closure. When you create a subroutine, all lexical (my) variables in the parent scope are made available to the subroutine. Event if they are no longer around when the routine is later called. Essentially, perl keeps a reference to the lexical variable associated with the routine. In your case a references to $i. When you call the routine it uses the current value of $i -- 3. Try this variation an see the difference: In this case since $j is created with each iteration of the loop, each of the closures will have a reference to a different copy of $j. This should give you the right output (although not what you were expecting- 0,1,2; not 1,2,3) You can find out all about closures in chapter 8 of the Camel book, or by searching the Monastery. Hope it helps, -pete "Pain heals. Chicks dig scars. Glory lasts forever."
In Section
Seekers of Perl Wisdom
|
|