I am guessing that this code is inside a subroutine and you're calling it while $_ is aliased to a constant. Try this:
for ( "read", "only", "value" ) {
print "$_\n";
$_ = "test"; # blows up
}
The problem is probably concealed in your code like so:
sub foo { $_ = "test"; }
foo(); # works
for ( "read", "only", "value" ) {
print "$_\n";
foo(); # blows up
}
The solution is to put a local $_; at some opportune point to decouple one piece of the code from the other. The trap is that aliasing constructs like for(), map and friends do not need such treatment, but while(<FH>) does.
Makeshifts last the longest.
|