HaloO,
I'm still contemplating how to get rid of the :: in the
ternary and make :: unequivocally available for a type
sigil and as a binary infix for symbol lookup.
Here's a possible solution:
1) ?? becomes a binary operator that behaves as follows:
a) it evaluates its lhs in boolean context
b) if this is true, ?? evaluates its rhs such that it
can't be undef
c) if this is false, ?? returns undef
2) the precedence of ?? is above // which naturally catches
the undef of a false condition.
This gives
$x = $y < 3 ?? "small" // "large";
and possibly even a low precedence version
$x = $y < 3 then "small" err "large"; # hmm
thence # old fashioned
therefore # long, but clear
An implementation could read:
&*infix:<??> (&cond, &code)
is parsed(...) # trait needed to insert {}?
{
if &cond() { return &code() but defined }
else { return undef }
}
Comments?
TSa