in reply to Unusual Closure Behaviour
my has compile-time *and* run-time effects. At compile time, the compiler knows about the variable, etc. At run-time, values are set, my $x; makes that $x becomes undef. So far, so good.
However, for efficiency reasons, if Perl exits a block, it will actually *not* delete any variables lexical to the block. You cannot refer to them anymore (the compiler takes care of that), but the data structure build for it remains. Perl does this because it is likely that you reenter a block and if the structure remains, Perl can save time rebuilding it. However, with my $x if undef, no run-time effect on $x happens when reentering the block. (The first time the block is entered, the datastructure gets build when $x is used). And since the structure doesn't get rebuild, the value doesn't get reset either. So, you have created a static variable....
-- Abigail
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: Unusual Closure Behaviour
by sierrathedog04 (Hermit) on Jul 12, 2001 at 21:11 UTC | |
by Abigail (Deacon) on Jul 13, 2001 at 14:26 UTC | |
by BrowserUk (Pope) on Sep 12, 2015 at 23:55 UTC | |
by shmem (Chancellor) on Sep 13, 2015 at 09:14 UTC | |
by Anonymous Monk on Sep 12, 2015 at 23:24 UTC | |
by Anonymous Monk on Sep 13, 2015 at 05:27 UTC |