Perl/Regex question (hopefully simple)
Madison Kelly
linux-5ZoueyuiTZhBDgjK7y7TUQ at public.gmane.org
Tue Jun 29 17:27:04 UTC 2004
G. Matthew Rice wrote:
> Madison Kelly <linux-5ZoueyuiTZhBDgjK7y7TUQ at public.gmane.org> writes:
>
>>$help_body =~ s/\[url=(.*)\](.*)\[\/url\]/<a href="\1"
>>target="_new">\2<\/a>/gi;
>>
>>Which seems very much like what you both recommended. Do you know if one
>>method is better or worse than the other or are they just two ways to do the
>>same thing?
>
>
> Read the perlre manpage. Scan for the section 'Warning on \1 vs $1'. Plus
> you get the $1, $2, ... after a m// operation is over.
>
> Aww, what the heck. Here it is:
>
> Warning on \1 vs $1
>
> Some people get too used to writing things like:
>
> $pattern =~ s/(\W)/\\\1/g;
>
> This is grandfathered for the RHS of a substitute to avoid
> shocking the sed addicts, but it's a dirty habit to get
> into. That's because in PerlThink, the righthand side of
> a "s///" is a double-quoted string. "\1" in the usual
> double-quoted string means a control-A. The customary
> Unix meaning of "\1" is kludged in for "s///". However,
> if you get into the habit of doing that, you get yourself
> into trouble if you then add an "/e" modifier.
>
> s/(\d+)/ \1 + 1 /eg; # causes warning under -w
>
> Or if you try to do
>
> s/(\d+)/\1000/;
>
> You can't disambiguate that by saying "\{1}000", whereas
> you can fix it with "${1}000". The operation of interpo-
> lation should not be confused with the operation of match-
> ing a backreference. Certainly they mean two different
> things on the left side of the "s///".
>
> HTH,
Thanks! That clears some stuff up and I've changed them to $<#>.
Madison
--
The Toronto Linux Users Group. Meetings: http://tlug.ss.org
TLUG requests: Linux topics, No HTML, wrap text below 80 columns
How to UNSUBSCRIBE: http://tlug.ss.org/subscribe.shtml
More information about the Legacy
mailing list