On Tue, Nov 3, 2009 at 4:33 PM, tom smith <climbingpartn...@gmail.com>wrote:

> Thanks for the tips!  More comments below.
> I saw it written the other way somewhere, and I thought it looked cleaner.
>  I'll do it your way from now on.
>
>
>>
>>     if ($line =~ /\((.*?)\)/) {
>>>
>>>        $line =~ s/$1/$i;$j/;
>>>
>>
>> If you have two regular expressions that are doing the same thing then you
>> are probably doing it incorrectly:
>>
>>     if ( $line =~ s/\((.*?)\)/($i;$j)/ ) {
>>
>
> Ah.  Nice.
>

Wait a minute, on further review I don't understand how that if condition
works.  According to perlop:

----
s/PATTERN/REPLACEMENT/egimosx
               Searches a string for a pattern, and if found, replaces that
               pattern with the replacement text and returns the number of
               substitutions made.  Otherwise it returns false
(specifically,
               the empty string).

               ....
-----

So if no substitution takes place, s/// returns an empty string.   Then in
the case of no substitution, wouldn't that leave me with:

    if ($line =~ "")

???   And that condition always evaluates to true as far as I can tell.
 Your if statement does work as advertised:

use strict;
use warnings;

$\ = "\n";


my $line = 'hello';

if ($line =~ s/z/e/) {  #no z's in 'hello', so no substitution
    print "matched!";
    print $line;
} else {
    print "no match";
    print $line;
}

--output:--
not match
hello

...but I don't understand why it works.

Reply via email to