On Sun, Apr 24, 2005 at 04:39:04PM -0700, Larry Wall wrote:
> : Larry suggested that to keep it from being collapsed, we somehow
> : augment toplevel AST:
> : 
> :     map { $_ => $_; } @foo;
> :     map { +($_ => $_) } @foo;
> 
> Uh, I'm not sure what + would return for a Pair, but I'm pretty sure it's
> not a pair.  A little P5ism sneaking in there?  :-)

Aye, indeed. :-)

> : But here is a new idea: Since the parser knows that the bare block is
> : followed by no trailing comma, how about we using it as a disambiguating
> : device, and define that it never collapses?
> : 
> :     map { $_ => $_ } @foo;  # closure
> :     map { $_ => $_ }, @foo; # hash
> 
> A block can be arbitrarily long.  I worry about disambiguating it by
> something could come lines later.  It's the /x problem all over again.
> Plus, I think many folks would rather think of the closure comma as
> optional rather than mandatorily missing.  Besides, if they can't
> keep the {...} straight, they're not gonna keep the comma straight either.

Okay, I concur.  r2319 now renders the trailing comma / adverbial colon
orthogonal to closure collapsing again; I have also implemented your
top-level-expression rule from an easlier thread.  So to disambiguate,
one has to write this now:

    map { $_ => $_; } @foo;

This works too:

    map { ;$_ => $_ } @foo;

But () is still only a grouper, so this won't do:

    map { ($_ => $_) } @foo;

Does this make sense?

Thanks,
/Autrijus/

Attachment: pgppdAs3gEUYk.pgp
Description: PGP signature

Reply via email to