On Sun, Apr 24, 2005 at 06:14:35PM -0700, Darren Duncan wrote:
: At 4:39 PM -0700 4/24/05, Larry Wall wrote:
: >On Mon, Apr 25, 2005 at 02:13:26AM +0800, Autrijus Tang wrote:
: >: A while ago I posted a conflict between a block containing a pair
: >: constructor, vs. a hash constructor:
: >:
: >:     map { $_ => $_ } @foo;
: >
: >: And maybe it can be extended over adverbial blocks, too:
: >:
: >:     @foo.map:{ $_ => $_ };  # closure
: 
: Why not just always use the ':' when you are giving a block.  The 
: block is essentially an adverb for a map|grep|sort anyway.  Whereas, 
: no ':' means its a hash-ref.  (Presumably each of map|grep|sort will 
: have a reasonable default adverb if no ':{}' is given.)

There are lots of blocks that shouldn't take colons.

: >I really think for clarity it has to be disambiguated by either
: >something syntactic on the front or something semantic at the top level.
: 
: I agree.  See my previous paragraph for an example.
: 
: >I still
: >kinda like the rule that it's a hash if the top-level looks like some
: >kind of list of pairs.  It optimizes for the common case.
: 
: I agree.
: 
: >Closures
: >returning pairs are a rarity.
: >Larry
: 
: This is beside the point but ...
: 
: Perhaps one of the new Perl 6 features makes this unnecessary, but I 
: often found myself doing just that when I wanted an effective method 
: to test multiple times if an element is in an array, like this:
: 
: my %foo = map:{ ( $_ => 1 ) } @bar;
: if( %foo{'abc'} ) ...
: if( %foo{'def'} ) ...
: if( %foo{'zrs'} ) ...
: 
: That closure is returning a pair for each array element.

How 'bout:

    [EMAIL PROTECTED] »=« 1;

That seems a lot clearer to me.  If you don't like hyper, how about

    [EMAIL PROTECTED] = (1..2:by(0));

:-)

Larry

Reply via email to