in reply to Re^2: Change double quote to single quotes
in thread Change double quote to single quotes
In a string value (not a string literal), each backslash is simply a backslash. There are no "literal" vs "special" backslashes in a string value. The problem is that, when interpolating a string into a regex, any backslashes get interpreted as "escaping" backslashes.
Unfortunately, you chose not to show us any of the code where you interpolate the string into the regex. (The code you did show us has almost nothing to do with your real problem but rather is an attempt to demonstrate what you think the problem might be.)
When interpolating into a regex, /...$str.../ will interpret the value of $str as a regex (where each backslash escapes the next character, likely changing its meaning). /...\Q$str\E.../ will interpret the value of $str as a plain string. It accomplishes this by doing quotemeta($str). That is, it adds a bunch of backslashes before giving the string to the regex parser.
If you only want the backslashes to be interpreted as "literal", not the other regex meta characters like dot, star, plus, parens, square brackets, "{1,5}", etc, then just put backslashes only in front of the existing backslashes:
$str =~ s-\\-\\\\-g; # Change each \ into \\ ... /...$str.../ ...
- tye
|
|---|