Имам тези два бита код, които смятах, че трябва да бъдат еквивалентни. Първият използва <|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+)
/;
Това ще даде това, което търсите.