The reason taking the quotemeta out fixed the problem is that a quotemeta-ed string that contained \W characters will, in general (there may be some oddball corner cases), not regex-match with itself after the string has been double-quote-ishly interpolated into a regex. The reason is that after a string is quotemeta-ed, something like '\-' in the quotemeta-ed string is literally a backslash-hyphen sequence of characters, but this sequence in a regex only matches a hyphen leaving the backslash in the quotemeta-ed string unmatched.
>perl -wMstrict -le
"my $s = 'a-b c*d';
my $qm_s = quotemeta $s;
print qq{raw: '$s' quotemeta-ed: '$qm_s'};
;;
printf qq{%s equal \n}, $qm_s eq $qm_s ? '' : 'NOT ';
printf qq{%s match \n}, $qm_s =~ /$qm_s/ ? '' : 'NO ';
"
raw: 'a-b c*d' quotemeta-ed: 'a\-b\ c\*d'
equal
NO match
|