Как я могу интерполировать переменную в регулярное выражение Perl 6?

В обзоре 05 упоминается, что Perl 6 не интерполирует переменные в регулярное выражение, но вы можете связать внешнюю переменную с шаблоном. Документы не упоминают эту функцию, насколько я могу судить. Я думаю, что люди все еще хотят как-то создать шаблон из строки, поэтому мне интересно, как это будет работать.

Вот программа, которая демонстрирует, что происходит сейчас. Я не знаю, должно ли это случиться или что-то предполагалось. Я вставляю переменную в шаблон. Если вы посмотрите на$r с.perl, вы видите имя переменной. Затем я применяю шаблон, и он соответствует. Я изменяю значение переменной. Теперь шаблон не совпадает. Замените его на что-то еще, что будет работать, и снова совпадет

my $target = 'abcdef';

my $n = 'abc';
my $r = rx/ ( <$n> ) /;

# the smart match like this doesn't return a Match object
# https://rt.perl.org/Ticket/Display.html?id=126969
put 'rx// directly: ',
    $target ~~ $r
        ?? "Matched $0" !! 'Misssed';

# now, change $n. The same $r won't match.
$n = 'xyz';

put 'rx// directly: ',
    $target ~~ $r
        ?? "Matched $0" !! 'Misssed';

# now, change back $n. The same $r does match.
$n = 'ab';
put 'rx// directly: ',
    $target ~~ $r
        ?? "Matched $0" !! 'Misssed';

Если это то, что он должен делать, хорошо. Документы здесь легкие, а тесты (де-факто spec) не сложны для такого поведения на большом расстоянии.

Я мог бы сделать дополнительную работу, чтобы закрыть копию (и, возможно, больше работы, чем я показываю в зависимости от того,$n), который я нахожу неумело:

my $r = do {
    my $m = $n;
    rx/ <$m> /;
    };

Но я все еще хотел бы иметь способ «доработать» шаблон (о боже, я только что попросил/o возвращаться). Метод вRegex возможно. Я думаю, что люди будут искать эту функцию.

my $r = rx/ .... /.finalize;  # I wish!

Или, Perl 6 имеет гораздо лучший способ сделать такие вещи, и я просто полон старой школы мышления. В Perl 6 вместо правил есть правила. За всем этим стоит парсер. Я думал, что определениеtoken или жеrule может быть, путь, но я думаю, что столкнулся с той же проблемой. Я не вижу, что такое иметь подчиненную фабрику.

Есть ли другой способ сделать это?

Ответы на вопрос(1)

Ваш ответ на вопрос