in reply to uninitialised variable

Hi opaltoot,

As the others have already said (such as the piece of documentation from perlsyn that stevieb quoted), don't put statement modifiers on my. There's also this related piece of doc, from perldiag (try running perl -wMdiagnostics -e 'my $x if 0'):

Deprecated use of my() in false conditional

(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.10.0, you can also use state variables to have lexicals that are initialized only once (see feature):

sub f { state $x; return $x++ }

Hope this helps,
-- Hauke D