On 3/7/07, Jm lists <[EMAIL PROTECTED]> wrote:
Hello,
$s="hello,test";
the 1st statement:
$s=~s/^(\w+)/$1 0000/
the 2nd statement:
$s=~s/^(\w+)/\1 0000/
What's the difference between these two statements?
Thanks!
Not much. $1 and \1 are roughly the same. $1 is the preferred form.
For more information read perldoc perlre. The following is 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 customā
ary 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///".
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/