Подтвердить что ты не робот

Использовать переменную как шаблон RegEx

Я хотел бы использовать переменную как шаблон 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?

4b9b3361

Ответ 1

Вы не можете использовать \Q в одной кавычки/неинтерполированной строке. Это видно лексеру.

В любом случае, тильда не является метасимволом.

Добавьте use regex "debug", и вы увидите, что на самом деле происходит.

Ответ 2

Как документация говорит:

    $re = qr/$pattern/;
    $string =~ /foo${re}bar/; # can be interpolated in other patterns
    $string =~ $re; # or used standalone
    $string =~ /$re/; # or this way

Итак, используйте оператор qr, похожий на кавычки.