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        


In reply to Re^3: Change double quote to single quotes (regex) by tye
in thread Change double quote to single quotes by rookie_monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.