V.Ramkumar wrote:
> Hi,
> 
> Any one suggest me, what is the error in my below code, Not any error when
> run, But unable to get the search value in replacement.
> 
> $content=~s/<$allelm/"<\1 xml:id=".$idseq++/egsi;
> 
> Here $allelm contains element list, (para|quote|list).
> 
> I am getting output as a junk for \1.

perldoc perlre says this

>   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///".

Rob

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to