One may or may not be undef. This falls under the same category as warned about in perlsyn.pod:
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.
Anyone have suggestions for expanding that text without making it more confusing? The basic rule is that my has both a run-time and compile-time effect, and the sane behaviour depends on the
my being actually executed (for the run-time effect) for any path through the code that will later refer to that variable name.
Update: I'm not sure this applies after all. Don't see how the my can have even a compile-time effect.