Are you sure the first one works and the second doesn't? If I add strictures to the top of your script and supply @_lines the following error is generated:
Global symbol "$_line" requires explicit package name at noname1.pl li +ne 10. Execution of noname1.pl aborted due to compilation errors.
Line 10 is the line my $templine = $_line; in the first loop. If I remove strictures but add (1) and (2) as appropriate to the conditional print statements in the two loops I get:
ABC = the line (2)
so maybe all your problem is is that you aren't using strictures and you have an old fashioned "typo in a variable name" error? Oh, the test code I used was:
#use strict; #use warnings; my @_lines = <<LINES; ABC in the first line but not the second LINES foreach my $line (@_lines) { my $templine = $_line; print "$templine"; # or print "$line"; if ($templine =~ /(ABC)/) {print "$1 = the line (1)";} } foreach my $_line (@_lines) { my $templine = $_line; ############ print "$templine"; ############ # or print "$line"; if ($templine =~ /(ABC)/) {print "$1 = the line (2)";} }
Uncomment the strictures to get helpful errors and warnings.
In reply to Re: Printing the variable makes the next match code work. Why?
by GrandFather
in thread Printing the variable makes the next match code work. Why?
by scaryfast
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |