in reply to qr/string/ is not the same as qr/$var/ ?
I have no solution to the eval problem, but FWIW, MO=Deparse,-p clarifies the issue:
Likewise for \Q...\E:% perl -MO=Deparse,-p -le '$patt = "a\Ubc"; print qr/$patt/' BEGIN { $/ = "\n"; $\ = "\n"; } ($patt = 'aBC'); print(qr/$patt/); -e syntax OK
In other words, by the time that qr sees it, perl has already transformed the original string, which explains both the problem and the eval workaround.% perl -MO=Deparse,-p -le '$patt = "a\Q[bc]\E"; print qr/$patt/' BEGIN { $/ = "\n"; $\ = "\n"; } ($patt = 'a\\[bc\\]'); print(qr/$patt/); -e syntax OK
Note that this behavior occurs only if the RHS of the first assignment is double-quoted; with single-quotes you end up with the same problem as if the pattern had been passed in in @ARGV:
% perl -le '$patt = q(a\Ubc); print qr/$patt/' (?-xism:a\Ubc)
Update: Deleted a bit of stray text that had snuck into one of the original code snippets; added the output for the \Q...\E case.
the lowliest monk
|
|---|