Perl 6 / все про ternary

Немного о тернарном операторе

Если заглянуть в файл с описанием грамматики Perl 6 STD.pm, то можно найти интересные особенности тернарного оператора.

token infix:sym<?? !!> ( --> Conditional) {
    '??'
    <.ws>
    <EXPR(%conditional)>
    [ '!!' ||
        [
        || <?before '='> <.panic: "Assignment not allowed within ??!!">
        || <?before '::'> <.panic: "Please use !! rather than ::">
        || <?before <infix>>    # Note: a tight infix would have parsed right
           <.panic: "Precedence too loose within ??!!; use ??()!! instead ">
        || <.panic: "Found ?? but no !!; possible precedence problem">
        ]
    ]
    {*}
}
 
token infix:sym<?> ( --> Conditional)
    { <sym> <obs('?: for the conditional operator', '??!!')> }

В грамматику включена проверка на то, чтобы второй разделитель не был :: (таким он был в ранних реализациях Perl 6).

Существует и проверка на то, чтобы не использовался старый синтаксис Perl 5 с одним знаком вопроса. (В Perl 6 оператор ? используется для переключения в булевый контекст.)

operators, ternary — 7 мая 2008