--- 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]