in reply to When is $_ local and when is it not?
The perlsyn manpage documents localization:
In the Foreach loops section:
The foreach loop iterates over a normal list value and sets the variable VAR to be each element of the list in turn. If the variable is preceded with the keyword my, then it is lexically scoped, and is therefore visible only within the loop. Otherwise, the variable is implicitly local to the loop and regains its former value upon exiting the loop.
The Compound statements section of the perlsyn manpage for Perl 5.6.1 (the PM perlsyn doesn't include this) mentions:
Unlike a "foreach" statement, a "while" statement never implicitly localises any variables.
Hope this helps.