in reply to Re: will you explain what's going on?
in thread will you explain what's going on?
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: will you explain what's going on?
by dave_the_m (Monsignor) on Oct 26, 2004 at 23:52 UTC | |
by maard (Pilgrim) on Oct 27, 2004 at 10:29 UTC | |
by ysth (Canon) on Oct 27, 2004 at 12:06 UTC | |
|
Re^3: will you explain what's going on?
by fglock (Vicar) on Oct 26, 2004 at 23:17 UTC | |
|
Re^3: will you explain what's going on?
by maard (Pilgrim) on Oct 27, 2004 at 10:23 UTC | |
by ysth (Canon) on Oct 27, 2004 at 11:58 UTC |