/ / Kiedy granica słowa <| w> w Perlu 6 nie jest granicą słowa <<? - regex, perl6

Kiedy granica słowa <| w> w Perlu 6 nie jest granicą wyrazu? - regex, perl6

Mam te dwa fragmenty kodu, które moim zdaniem powinny być równoważne. Pierwszy używa <|w> aby określić granicę słowa, w której powinien znajdować się znak inny niż słowo (lub początek łańcucha) H. Drugi przykład wykorzystuje <<, który powinien zrobić to samo.

my $string = "Hamadryas perlicus";
say $string ~~ /
<?after <|w> Hamadryas s+ >
(w+)
/;

say $string ~~ /
<?after << Hamadryas s+ >
(w+)
/;

Pierwszy pasuje, ale drugi nie:

「perlicus」
0 => 「perlicus」
Nil

Czy jest jakaś inna różnica między tymi dwoma?

Odpowiedzi:

3 dla odpowiedzi № 1

Ta odpowiedź autorstwa timotimo na kanale IRC daje wskazówkę, dlaczego tak się dzieje. Kiedy używasz after, w rzeczywistości przerzucasz wyrażenie regularne. Następnie musisz obrócić w prawo w lewo, a to zadziała.

use v6;

my $string = "Hamadryas perlicus";
say $string ~~ /
<?after  Hamadryas <|w> s+ >
(w+)
/;

say $string ~~ /
<?after Hamadryas « s+ >
(w+)
/;

To da ci to, czego szukasz.