Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Quickie Question: search and replace problem

by indigo (Scribe)
on Apr 19, 2001 at 00:19 UTC ( #73644=note: print w/replies, xml ) Need Help??


in reply to Quickie Question: search and replace problem

Basically, $data is intepreted as a string, and $attempt1 as a regex, so if you have special regex characters, they will never match up, no matter how you escape them.

To make a regex treat $attempt1 as a string, use \Q and \E:
$data =~ s/\Q$attempt1\E/$newstr/
man perlre for more info.

Updated: Added rant, as per tye :)

Replies are listed 'Best First'.
(tye)Re: Quickie Question: search and replace problem
by tye (Sage) on Apr 19, 2001 at 00:58 UTC

    I've created a monster! ;)

    Actually, you can eventually quote them enough to get the same effect as \Q and \E. I personally like the /\Q$string\E/ construct and recommend it over the other methods I'm about to mention.

    But you can also do any of these:

    $attempt= "get_stuff\\(\\)"; $attempt= "\Qget_stuff()\E"; $attempt= quotemeta( "get_stuff()" ); $attempt= qr/get_stuff\(\)/; $attempt= 'get_stuff\(\)';
    but I still find the original suggestion makes the most sense to me. In a regex (that means only the first half of s///), $x means interpret the contents of $x as a regex while \Q$x\E means interpret the contents of $x as a string.

    Update: Thanks, indigo, I missed that!

            - tye (but my friends call me "Tye")
      All these do the escaping properly. But the code went like this:
      $data = $attempt; $data =~ s/$attempt/$newstr/;
      The problem isn't simply bad escaping. Either $attempt gets munged, and the match fails, or you have to premunge $data to get $attempt right, and the match still fails.

      So /\Q$attempt\E/ really is the best way to go.
Re: Re: Quickie Question: search and replace problem
by JojoLinkyBob (Scribe) on Apr 19, 2001 at 00:55 UTC
    Thanks! Desert coder

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://73644]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (2)
As of 2020-10-24 09:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My favourite web site is:












    Results (242 votes). Check out past polls.

    Notices?