in reply to 'my' with 'if 0' retains old value

Quote diotalevi:

my() has a runtime effect. You *always* (unless you're doing something freakish) want that to happen. The my $var STATEMENT-MODIFIER allows the runtime part of my() to potentially not happen.

In other words,
my $var = ... if/unless/while/for/foreach ...
is wrong and/or buggy. Use
my $var;
$var = ... if/unless/while/for/foreach ...
instead

In this case, replace
my $v2 = -2 if 0;
with
my $v2;
$v2 = -2 if 0;

PS - You post here regularly. You should start heeding "Clean Your Room" in How (Not) To Ask A Question and start indenting your code.

Replies are listed 'Best First'.
Re^2: 'my' with 'if 0' retains old value
by diotalevi (Canon) on Apr 21, 2006 at 05:37 UTC

    You can use Perl::Critic to automatically find such fugly code as well. Neat, eh?

    ⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊

Re^2: 'my' with 'if 0' retains old value
by bart (Canon) on Apr 21, 2006 at 15:23 UTC
    my $v2; $v2 = -2 if 0;
    Surely that won't do anything useful. I mean, it'll do the same as
    my $v2;
    Hence: no static variable, no value assigned.

    Anyway:

    my $v2 if 0;
    will create a static variable. But IMO that's a coincidence of the implementation, I wouldn't count on it.
      What if 0 is actually DEBUG? I don't presume to know what the real code is like.

        or what if 0 is actually rand() > .5? Then it's a static variable *some* of the time.

        ⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊