in reply to Re: matching / splitting within a substitution
in thread matching / splitting within a substitution

Thanks jsprat (and dws -- I should have tried Deparse). I do believe we have a bug, but I got a feeling it's already been reported(will search). Anyway, here is a simpler example that I might submit as a bug report (and I hope this is easy enough to follow BrowserUk).
## in the substitution part (the second half), ## the /\[B\]/ is turned into /[B]/, see results ## and deparse output at the end my $t = '[A] yoda [B] jeffa [C]'; $t =~ s { \[A\] (.*?) \[C\] } [ my $r = $1; if( $r =~ /\[B\]/ ){ $r =~ s/\[B\]/GOT B/; } $r; ]gsex; my $o = '[A] yoda [B] jeffa [C]'; $o =~ s { \[A\] (.*?) \[C\] } { my $r = $1; if( $r =~ /\[B\]/ ){ $r =~ s/\[B\]/GOT B/; } $r; }gsex; # happens here also, but is not significant # since <> aren't metacharacters my $p = '<A> yoda <B> jeffa <C>'; $p =~ s { \<A\> (.*?) \<C\> } < my $r = $1; if( $r =~ /\<B\>/ ){ $r =~ s/\<B\>/GOT B/; } $r; >gsex; print " $t $o $p "; __END__ yoda [GOT B] jeffa yoda GOT B jeffa yoda GOT B jeffa # -MO=Deparse output my $t = '[A] yoda [B] jeffa [C]'; $t =~ s[\n \[A\]\n (.*?)\n \[C\]\n ][my $r = $ +1; if ($r =~ /[B]/) { $r =~ s/[B]/GOT B/; } $r;]egsx; my $o = '[A] yoda [B] jeffa [C]'; $o =~ s[\n \[A\]\n (.*?)\n \[C\]\n ][my $r = $ +1; if ($r =~ /\[B\]/) { $r =~ s/\[B\]/GOT B/; } $r;]egsx; my $p = '<A> yoda <B> jeffa <C>'; $p =~ s[\n <A>\n (.*?)\n <C>\n ][my $r = $1; if ($r =~ /<B>/) { $r =~ s/<B>/GOT B/; } $r;]egsx; print "\n$t\n$o\n$p\n";

MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
** The third rule of perl club is a statement of fact: pod is sexy.

Replies are listed 'Best First'.
Re^3: matching / splitting within a substitution (simpler)
by tye (Sage) on Jul 15, 2003 at 16:56 UTC

    A simpler example to report is:

    % perl -MO=Deparse -e "s{\[A\]}[s/\[B\]/C/g]g" s[\[A\]][s/[B]/C/g]g; -e syntax OK
    But I don't consider it a bug. If your delimiters are [] then \[ becomes [. If you want \[ then you'll need \\\[ (or \\[ also works if the square brackets balance).

    So, inside qq[], [] and \[\] are the same. Much like "\g" and "g" are the same or '\g' and '\\g' are the same.

                    - tye
      Ok, I think you have a point, so what I think now is that the pod needs to be enhanced to mention this. Thanks.
      C:\>perl -MO=Deparse -e" s{\[A\]}'s/\[B\]/C/g'g" s[\[A\]][s/\\[B\\]/C/g]g; -e syntax OK

      MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
      I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
      ** The third rule of perl club is a statement of fact: pod is sexy.