What is the difference between \1 and $1 in a Perl regex?

Straight from perldoc 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///”.

Leave a Comment