S04 says thus:
The default case:
default {...}
is exactly equivalent to
when true {...}
However, that parses to:
if $_ ~~ bool::true { ...; leave }
Which is not executed if $_ is false, unless ~~ bool::true does
something special. Perhaps default should be equivalent to:
when $_ { ... }
That is, $_ is always $_, so the block is always executed.
(It also strikes me that using booleans in when clauses could/should be
disallowed entirely.)
--
Ilmari Vacklin
(wolverian)
Good catch. Given the discussions about given arglist pattern
matching, we may be able to make it:
when :(_) {...}
Or:
when -> _ {...}
And if not that, then this ought to work:
when ({ 1 }) {...}
(A nullary codeblock that is evaluated for truth).
Luke
It did do something special at the time the Apocalypse was written,
but it was probably a bad idea. Smart match was going to recognize
obviously boolean expressions and just ignore the other argument.
The problem is that it's not always obvious what's obvious.
Larry