in reply to Re^2: my $cache = undef if undef;
in thread my $cache = undef if undef;

It cannot be clobbered, and there are no memory leaks in either case. It's an effect of how the pads for lexical variables are maintained by the Perl core. Larry didn't want to promise this will always work, but it's very unlikely to break, since it's kind of an accidental feature of the Perl guts architecture. A lot would have to change to break it.

Makeshifts last the longest.

Replies are listed 'Best First'.
Re^4: my $cache = undef if undef;
by ysth (Canon) on Jan 27, 2005 at 06:32 UTC
    It may very well be gone someday in perl5. Really. Don't use it. Also note that the staticness is relative to the pad, not the function; for instance, the data does not persist for recursive calls to the function.

      If you look a few nodes further up the thread you'll see I'm advising against its use anyway. :-) I'm simply saying that there is a lot of inertia against its disappearance. That's not a promise, of course. It does work in the meantime though, and can very occasionally be useful so long as we're talking about throwaway code (I used it in a oneliner once to save a few keystrokes.)

      Makeshifts last the longest.