[Melbourne-pm] Pls explain?
Brendon Oliver
brendon.oliver at gmail.com
Tue Oct 23 18:44:36 PDT 2007
On Wednesday 24 October 2007 11:33:33 Jacinta Richardson wrote:
> You can find lots more on this bug by searching for:
>
> my if 0
>
> Abigail from Perl Monks explains it thus:
>
> ====
> my $x if undef;
>
> 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....
> ====
Thanks for the research / explanation Jacinta - much appreciated.
> It was covered in the "This Week on p5p 2000/05/21"
> (http://www.perl.com/pub/a/2000/05/p5pdigest/THISWEEK-20000521.html#my_x_if
>_0;_Trick)
> Apparently Perl 5.10 throws a big fat warning if it sees this kind of
> behaviour.
Gee, took only 7.5 years to fix (counting from the article publication)! Now
*that's* progress! ;-P
Cheers,
- Brendon
--
BREAKFAST.COM Halted... Cereal Port Not Responding.
11:41:41 up 8 days, 23:07, 3 users, load average: 0.10, 0.18, 0.38
More information about the Melbourne-pm
mailing list