/ / Кога границата на думите на Perl 6 <| w> не е << граница на думата? - регекс, perl6

Кога границата на думи на Perl 6 не е граница на думи? - regex, perl6

Имам тези два бита код, които смятах, че трябва да бъдат еквивалентни. Първият използва <|w> за да посочите граница на думата, където символът без думи (или началото на низ) трябва да бъде преди Н, Вторият пример използва <<, което би трябвало да направи същото.

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

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

Първият съвпада, но вторият не:

「perlicus」
0 => 「perlicus」
Nil

Има ли някаква друга разлика в тези две?

Отговори:

3 за отговор № 1

Този отговор от тимотимо в IRC канала дава намек защо това се случва по този начин. Когато използвате after, вие всъщност прелиствате правилния израз. След това ще трябва да се обърнете надясно наляво и това ще работи.

use v6;

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

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

Това ще даде това, което търсите.