2017-01-04 3 views
5

Возможно ли использовать соединение для соответствия любому из значений на стыке? Я хочу сопоставить любое из значений в массиве. Каков правильный способ сделать это?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」 
> 

Спасибо!

ответ

8

Коммутаторы не предназначены для интерполяции в регулярные выражения. Они предназначены для использования в нормальных 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」 
+0

Еще раз спасибо SMLS !! Я думаю, что Perl6 действительно классный; Я делаю все быстрее с perl6, чем с ракеткой. – lisprogtor

Смежные вопросы