perl6 Возможно ли использование соединений в сопоставлении?

Можно ли использовать соединение для сопоставления с любым значением в соединении? Я хочу сопоставить любое из значений в массиве. Как правильно это сделать?

lisprog$ perl6
To exit type 'exit' or '^D'
> my @a=<a b c>
[a b c]
> any(@a)
any(a, b, c)
> my $x=any(@a)
any(a, b, c)
> my $y = "a 1"
a 1
> say $y ~~ m/ $x /
False
> say $y ~~ m/ "$x" /
False
> my $x = any(@a).Str
any("a", "b", "c")
> say $y ~~ m/ $x /
False
> say $y ~~ m/ || $x /
False
> say $y ~~ m/ || @a /
「a」
> 

Спасибо!!

1 ответ

Решение

Соединения не предназначены для интерполяции в регулярные выражения. Они предназначены для использования в обычных выражениях Perl 6, особенно с операторами сравнения (такими как eq):

my @a = <x y z>;
say    "y" eq any(@a);  # any(False, True, False)
say so "y" eq any(@a);  # True

Чтобы сопоставить любое из значений массива в регулярном выражении, просто введите имя переменной массива (начиная с @) в регулярном выражении По умолчанию это интерпретируется как | чередование ("самое длинное совпадение"), но вы также можете указать его как || чередование ("первый матч"):

my @a = <foo bar barkeep>;
say "barkeeper" ~~ / @a /;     # 「barkeep」
say "barkeeper" ~~ / || @a /;  # 「bar」
Другие вопросы по тегам