syntax doc:


if True {
    say "Hello";
}
say "world";

很好,并且Why is this Perl 6 feed operator a “bogus statement”?发生了什么。

但是,此规则如何适用于不受约束的else?这是特例吗?
if True {
    say "Hello";
}
else {
    say "Something else";
}
say "world";

或者, with-orwith example呢:
my $s = "abc";
with   $s.index("a") { say "Found a at $_" }
orwith $s.index("b") { say "Found b at $_" }
orwith $s.index("c") { say "Found c at $_" }
else                 { say "Didn't find a, b or c" }

最佳答案

您找到的文档不完全正确。 documentation has been updated and is now correct。现在显示为:



原始答案:

查看 if Rakudonqp的语法,似乎将一块if/elsif/else组的块作为一个控制语句一起解析出来。
if中的nqp规则

rule statement_control:sym<if> {
    <sym>\s
    <xblock>
    [ 'elsif'\s <xblock> ]*
    [ 'else'\s <else=.pblock> ]?
}

(https://github.com/perl6/nqp/blob/master/src/NQP/Grammar.nqp#L243,截至2017年8月5日)

Rakudo中if的规则
rule statement_control:sym<if> {
    $<sym>=[if|with]<.kok> {}
    <xblock(so ~$<sym>[0] ~~ /with/)>
    [
        [
        | 'else'\h*'if' <.typed_panic: 'X::Syntax::Malformed::Elsif'>
        | 'elif' { $/.typed_panic('X::Syntax::Malformed::Elsif', what => "elif") }
        | $<sym>='elsif' <xblock>
        | $<sym>='orwith' <xblock(1)>
        ]
    ]*
    {}
    [ 'else' <else=.pblock(so ~$<sym>[-1] ~~ /with/)> ]?
}

(https://github.com/rakudo/rakudo/blob/nom/src/Perl6/Grammar.nqp#L1450截至2017年8月5日)

10-07 14:59