in reply to Regex Search String in a Variable

You seem to understand this already, but I thought I'd try to make it clear for future readers of this thread: Why doesn't it work?

When you finish slashing away at the $search string, what have you got?

Win8 Strawberry 5.8.9.5 (32) Sat 05/01/2021 17:03:44 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings -l my $search = "x2\\.+\\x4"; print $search; ^Z x2\.+\x4 ^^ || ++----- backslash escaped literal period (one or more)
Unescaped, the . (dot) is a regex matching operator (see perlre, perlretut). Escaped, it matches a literal period, and there is no period to match in your example $text string. The + quantifier matches one or more of the atom before it, a literal period in this case.

Similar result if you pass the $search string through the qr// regex object constructor.

Win8 Strawberry 5.8.9.5 (32) Sat 05/01/2021 17:14:10 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings -l my $search = "x2\\.+\\x4"; my $rx_search = qr/$search/; print $rx_search; ^Z (?-xism:x2\.+\x4)

Update: Minor re-formatting for clarity/coherence.


Give a man a fish:  <%-{-{-{-<

Replies are listed 'Best First'.
Re^2: Regex Search String in a Variable
by LanX (Saint) on May 02, 2021 at 12:07 UTC
    I think the easiest way to put it, is that backslash is the escape character for literal strings as well as for regex meta-characters.

    This means they need to be doubled for each step.

    Even in single quoted strings, since they allow escaping the delimiter.

    AFAIK are here-docs the only way to avoid the need of self-escaping a \

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

      AFAIK are here-docs the only way to avoid the need of self-escaping a \

      Actually, I was not aware of this, but yeah:

      Win8 Strawberry 5.8.9.5 (32) Sun 05/02/2021 21:06:46 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings my $s = <<'EOT'; \b\\o\\\f\\\\f\ EOT print "'$s' \n"; $s = q/\q\\u\\\u\\\\x\ /; print "'$s' \n"; ^Z '\b\\o\\\f\\\\f\ ' '\q\u\\u\\x\ '
      Learned something today! :)


      Give a man a fish:  <%-{-{-{-<

        Well it's like reading a doc (sic), just w/o needing a filehandle. Alas we need to chomp it to get rid of a newline.

        Putting it in the __DATA__ section would do as well, but this is reading from an filehandle, but w/o need to open it first.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery