The jury is still debating whether this is a feature or a
bug. All I can offer is an explanation.
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,
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....
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.
| & || & |
| < || < |
| > || > |
| [ || [ |
| ] || ] ||