OlegG has asked for the wisdom of the Perl Monks concerning the following question:

Is it bug or feature?
use strict; sub w { my $wtf = 'xxx' if 0; warn $wtf; $wtf = "zzz"; }; w(); w();
Got:
Warning: something's wrong at t12.pl line 5. zzz at t12.pl line 5.
Expected:
Warning: something's wrong at t12.pl line 5. Warning: something's wrong at t12.pl line 5.

Replies are listed 'Best First'.
Re: [BUG||FEATURE] Lexical variable saves state after out of scope
by davido (Cardinal) on Apr 26, 2012 at 08:18 UTC
    • It's a feature if you are writing obfu.
    • It's a punishable offense if you use it anywhere else.
    • It's a bug waiting to happen if you're coding under the cognitive handicap of sleep deprivation.
    • It's what the C++ people love to refer to as "Undefined behavior."

    Dave

      It's what the C++ people love to refer to as "Undefined behavior."
      Which reminds me of an amusing exchange on P5P in 2004:

      In scalar context, the behaviour of sort() is undefined.

      -- from perldoc -f sort

      The other strawman I use is "sort in a scalar context might just play Nethack"

      -- Randal L. Schwartz on P5P, June 10 2004

      A patch is attached. It's incompatible with David's 'sortedness' patch, and fails if nethack is not in the user's path.

      Configure should be expanded to detect rogue-like games that are available on the system, so that an appropriate one can be started if nethack is not installed.

      My original goal was for sort to play nethack when called in a void context, however it appears that Perl is smart enough to optimise this instance away.

      -- Paul Fenwick's response

Re: [BUG||FEATURE] Lexical variable saves state after out of scope
by moritz (Cardinal) on Apr 26, 2012 at 06:59 UTC

    From perlsyn:

    NOTE: The behaviour of a "my" statement modified with a statement modifier conditional or loop construct (e.g. "my $x if ...") is undefined. The value of the "my" variable may be "undef", any previously assigned value, or possibly anything else. Don't rely on it. Future versions of perl might do something different from the version of perl you try it out on. Here be dragons.
Re: [BUG||FEATURE] Lexical variable saves state after out of scope
by jwkrahn (Monsignor) on Apr 26, 2012 at 06:43 UTC
Re: [BUG||FEATURE] Lexical variable saves state after out of scope
by Anonymous Monk on Apr 26, 2012 at 06:42 UTC