Немного о тернарном операторе
Если заглянуть в файл с описанием грамматики 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