if ($table->cell($rownum, 0..2) =~ /\xa0/) {
acts on the result returned from $table->cell($rownum, 0..2). The two subsequent substitutions (only one of which is performed for a particular pass through the code) will act on $_ - which has not been affected by the code shown. It may be that what you really want is something like:
my $cellStr = $table->cell($rownum, 0..2); if ($cellStr =~ /\xa0/) { $cellStr =~ s/\xa0\d+/ /; } else { $cellStr =~ s/\xa0//; }
or you could use the default variable:
$_ = $table->cell($rownum, 0..2); if (/\xa0/) { s/\xa0\d+/ /; } else { s/\xa0//; }
Oh, and if/else is not a loop! It is however a control structure.
Update: having looked at your code just a little longer - What are you trying to do! Are you trying to edit the string returned by the method call, or is there a larger context in which your code actually makes sense and you do want to edit the contents of the default variable (which must be set as a side effect of the call - very nasty!)?
In reply to Re: Will a substitution in an if/else loop default to $_?
by GrandFather
in thread Will a substitution in an if/else control structure default to $_?
by Lawliet
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |