If you'd like to turn this into a doc-u-bug, that's fine; please open
a ticket at

https://github.com/perl6/doc/issues


On Mon, Jan 16, 2017 at 11:37 AM, Parrot Raiser <1parr...@gmail.com> wrote:
> Any time there's a bug report based on a serious misunderstanding of
> language behaviour by someone otherwise apparently competent, should
> it be considered an LTA for the relevant part of the documentation?
>
> On 1/15/17, jn...@jnthn.net via RT <perl6-bugs-follo...@perl.org> wrote:
>> On Sun, 15 Jan 2017 05:06:21 -0800, ronaldxs wrote:
>>> So "42" ~~ / [ "0" || "42" ] | "4" / matches 4 but if you stick to just
>>> one kind of alternation:
>>>
>>> "42" ~~ / [ "0" | "42" ] | "4" /
>>>
>>> "42" ~~ / [ "0" || "42" ] || "4" /
>>>
>>> the match correctly comes back with 42.  It looks like in the mixed case
>>> the "|" longest alternation is not picking the longest match which is a
>>> bug.
>>>
>> This is not a bug. `||` is by design not declarative, and so only the first
>> branch of it is significant for LTM purposes. This behavior can be confirmed
>> by re-ordering the imperative alternation:
>>
>>> "42" ~~ / [ "0" || "42" ] | "4" /
>> 「4」
>>> "42" ~~ / [ "42" || "0" ] | "4" /
>> 「42」
>>
>> Therefore, the longest declarative match is 4, and so that is the branch
>> that LTM selects. Since there's no anchoring, there's furthermore no reason
>> for it to backtrack into the second branch of the `|` to try the other `||`
>> branch.
>>
>> I'm pretty sure this behavior is relied upon in the Perl 6 grammar itself;
>> off the top of my head, it shows up in a bunch of places for the sake of
>> error handling.
>>
>> So, working as designed.
>>
>> Thanks,
>>
>> /jnthn
>>



-- 
Will "Coke" Coleda

Reply via email to