Ответ 1
Вы не можете использовать \Q
в одной кавычки/неинтерполированной строке. Это видно лексеру.
В любом случае, тильда не является метасимволом.
Добавьте use regex "debug"
, и вы увидите, что на самом деле происходит.
Я хотел бы использовать переменную как шаблон RegEx для сопоставления имен файлов:
my $file = "test~";
my $regex1 = '^.+\Q~\E$';
my $regex2 = '^.+\\Q~\\E$';
print int($file =~ m/$regex1/)."\n";
print int($file =~ m/$regex2/)."\n";
print int($file =~ m/^.+\Q~\E$/)."\n";
Результат (или на ideone.com):
0
0
1
Может ли кто-нибудь объяснить мне, как я могу использовать переменную как шаблон RegEx?
Вы не можете использовать \Q
в одной кавычки/неинтерполированной строке. Это видно лексеру.
В любом случае, тильда не является метасимволом.
Добавьте use regex "debug"
, и вы увидите, что на самом деле происходит.
Как документация говорит:
$re = qr/$pattern/;
$string =~ /foo${re}bar/; # can be interpolated in other patterns
$string =~ $re; # or used standalone
$string =~ /$re/; # or this way
Итак, используйте оператор qr
, похожий на кавычки.