This issue was also recently raised on P2P/RT, here. Also:
$ perl -wMdiagnostics -e 'my $x if 0' Deprecated use of my() in false conditional at -e line 1 (#1) (D deprecated) You used a declaration similar to my $x if 0. There has been a long-standing bug in Perl that causes a lexical variable not to be cleared at scope exit when its declaration includes a false conditional. Some people have exploited this bug to achieve a kind of static variable. Since we intend to fix this bug, we don't want people relying on this behavior. You can achieve a similar static effect by declaring the variable in a separate block outside the function, eg sub f { my $x if 0; return $x++ } becomes { my $x; sub f { return $x++ } } Beginning with perl 5.9.4, you can also use state variables to have lexicals that are initialized only once (see feature): sub f { state $x; return $x++ }
In reply to Re^3: Assigning from post fix if exists breaks local scoping?
by Anonymous Monk
in thread Assigning from post fix if exists breaks local scoping?
by swinging_simian
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |