Darren Duncan skribis 2005-04-20 11:40 (-0700):A clear way to disambiguate a block from a hash-ref when using map/grep/sort etc is to use a colon before the leading brace for a block rather than a space, like this: map:{ $_ => uc $_ }
I think the best disambiguators for hash/sub interpretation are "hash" and "sub", even though sub is a little longer than a colon. Juerd
In this case, I seem to recall reading that the problem was with the space, and the colon replaces the space.
The problem is that, with 'sort' for example, the block is optional, and I think it is like an adverb.
For example, this leaves it out:
@bar = sort @foo;
In this case, it is kept:
@bar = sort:{ $a <=> $b } @foo;
In both cases, @foo is the argument, and not the block. If you do 'sub' or etc, that would make this look like a code argument, which it isn't.
If you did this:
@bar = sort { ... } @foo;
Then the {} would look like a first argument which is a hash ref.
The general principle of using the ':' was meant to work with any kind of list operator usage, to say how it does its thing, not with what.
-- Darren Duncan