On Jan 3, 6:32 am, [EMAIL PROTECTED] (Chas. Owens) wrote: > On Jan 2, 2008 11:11 PM, Murali <[EMAIL PROTECTED]> wrote:> Hi, > > > I have a scalar variable $x whose value is "a(b" > > > I am trying to replace the paranthesis with a backslash followed by > > parenthesis, I mean, ( to \( > > > $x =~ s/\(/\\(/g; > > > However this is making $x as "a\\(b" which is not what I want. > > snip > > One of those two statements is false. If $x holds only "a(b" then $x > =~ s/\(/\\(/g will result in $x holding "a\(b" > > perl -le '$x = "a(b"; print $x; $x =~ s/\(/\\(/; print $x' > > prints > > a(b > a\(b > > So, if you are seeing 'a\\(b' then one of two things is occurring: > 1. you aren't really seeing 'a\\(b', you just think it is there > because that is what is in the replacement string > 2. $x doesn't just contain "a(b" > > I would suggest printing the variable to the screen to see if it > really contains 'a\\(b'. If it doesn't (and I expect that it > doesn't), I would suggest going back and rereading the Quote and > Quote-like Operators section in perldoc perlop > orhttp://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operatorsto > understand why a \\ in the second part of the substitutionis turning > into a \ in the output (hint: it has to do with interpolation and > escapes). > > If you do indeed see a second backslash in the output then $x must not > have contained what you said it contained. Go back an take a better > look at it. If it contains something like 'a(b a\(b' then the > substitution will turn it into 'a\(b a\\(b'. You can use the > zero-width negative look-behind assertion* that John mentions in his > email to prevent it from prepending a \ to a ( that is already > preceded by a \. > > * read more in perldoc perlre > orhttp://perldoc.perl.org/perlre.html#Look-Around-Assertions
Thanks to all those who responded. I was testing the above snippet in perl's debugger mode and was using x to print the variable and hence it was showing two backslashes. When I tried print, it worked just fine. -Murali -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/