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/


Reply via email to