print($regexp) Expect Gives
-------------- ------------ ----------
\Q*\E\Q*\E \*\* \*\Q*\E
\Q**LOL** \*\*LOL\*\* \Q**LOL**
\\Quit\\Exit \\Quit\\Exit \Quit\Exit
\Qfoo\\E foo\\\\E foo\\
####
my $in_quote = 0;
$regexp =~ s/([^\\]|\\.)/
if ($in_quote) {
if ($1 eq '\\E') {
$in_quote = 0;
''
} else {
quotemeta($1)
}
} else {
if ($1 eq '\\Q') {
$in_quote = 1;
''
} else {
$1
}
}
/eg;
##
##
$regexp =~ s/
\G
(
(?:[^\\]|\\[^Q])*
)
(?:
\\Q
(?:[^\\]|\\[^E])*
(?:\\E)?
)?
/
$1 . (defined($2) ? quotemeta($2) : '')
/xge;