Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

S04 default { } bug?

0 views
Skip to first unread message

Ilmari Vacklin

unread,
Oct 24, 2005, 12:39:23 AM10/24/05
to perl6-l...@perl.org
Hi,

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)

Luke Palmer

unread,
Oct 25, 2005, 1:33:24 AM10/25/05
to perl6-l...@perl.org
On 10/23/05, Ilmari Vacklin <ilmari....@helsinki.fi> wrote:
> Hi,
>
> 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.

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

Larry Wall

unread,
Oct 25, 2005, 4:18:44 PM10/25/05
to perl6-l...@perl.org
On Mon, Oct 24, 2005 at 07:39:23AM +0300, Ilmari Vacklin wrote:
: Hi,

:
: 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.

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

0 new messages