--- david <[EMAIL PROTECTED]> wrote:
> Paul wrote:
> > By the way, Harry -- don't use \1. Use $1.
> > The backslashed version is only there for backwards compatibility,
> > and I think it's deprecated.
> 
> depends on how you use it, it's probably not just for backwards 
> compatibility:
> #!/usr/bin/perl -w
> use strict;
> my $string = '9999abcd9999';
> if($string =~ /^(\d+)abcd\1/){
>         print "matched\n";
> }
> __END__
> prints:
> matched

>From perlre:
============
     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 an
     "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 interpolation
     should not be confused with the operation of matching a
     backreference.  Certainly they mean two different things on
     the left side of the "s///".

Doesn't say it's deprecated, though.
Still, is there ever a time $1 won't work?

__________________________________________________
Do you Yahoo!?
Yahoo! Tax Center - forms, calculators, tips, more
http://taxes.yahoo.com/

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to