No, that's incorrect:
use strict; use warnings; for my $bool ( 0 .. 1 ) { my $name = 'bob' if $bool; print "($name)\n"; }
The actual truth of the matter is that my has compile-time and run-time effects.
At compile time, Perl creates an entry for $namedisplay in the appropriate lexical pad. Thus every lookup for that variable will find the lexical.
At run time, Perl evaluates the condition to determine whether to assign a new value to the lexical variable. Perl doesn't (always) clear lexical variables with refcounts of zero at scope exit (it's an optimization). However, if you don't always reset your variable -- if the run-time behavior of my doesn't occur because of a false conditional -- you will (may) see the old values.
Update: Actually, I can't recreate the memory or trip the warning about it now either, so I've edited my post somewhat.
In reply to Re^2: will you explain what's going on?
by chromatic
in thread will you explain what's going on?
by maard
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |