How can I use a variable for a regex pattern without interpreting meta characters?

Use \Q to autoescape any potentially problematic characters in your variable.

if($text_to_search =~ m/\Q$search_string/) print "wee";

Update: To clarify how this works…

The \Q will turn on “autoescaping” of special characters in the regex. That means that any characters which would otherwise have a special meaning inside the match operator (for example, *, ^ or [ and ]) will have a \ inserted before them so their special meaning is switched off.

The autoescaping is in effect until one of two situations occurs. Either a \E is found in the string or the end of the string is reached.

In my example above, there was no need to turn off the autoescaping, so I omitted the \E. If you need to use regex metacharacters later in the regex, then you’ll need to use \E.

Leave a Comment