perlman:perlsub, perlman:perlsyn and perlman:perlvar all have some comments about this, but it can be hard to get the picture from those without someone (or some bug) pointing it out. perlman:perlvar states that $_ is assigned to in your while case, but doesn't make it clear that $_ isn't localized by while as a foreach would.
Either localize $_ yourself, or switch to another while style for any loop that calls subroutines: while (my $line = <FILE>) {
In reply to Re: localization of $_
by TheoPetersen
in thread localization of $_
by modred
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |