On Fri, Aug 19, 2005 at 08:39:24AM -0700, Larry Wall wrote:
: Actually, that's an argument that : is in a different class than the regex
: quantifiers, and required named should be
: 
:     sub bar (+$:key)
: 
: as I speculated earlier.  Maybe we just force that to bind to $key instead
: of $:key.

Which makes me wonder whether, in ordinary code (not sigs)

    $:key

is short for

    :key($key)

The idea being that it makes it really easy to pass delegate particular
pairs to subfunctions as long as you keep the names consistent.  It'd
also make it drop-dead easy to write positional-to-named constructors:

    method new ($proto: $a, $b, $c) {
        ...
        return $proto.bless($:a, $:b, $:c);
    }

instead of

    method new ($proto: $a,$b,$c) {
        ...
        return $proto.bless(:a($a), :b($b), :c($c));
    }

I suppose if we pushed it we could even allow $:foo in adverbial position.

    1 .. 100 $:by

But I wonder if people will think that

    foo 1, 2, 3, @:foo

should interpolate @foo as a list of pairs rather than binding to the
'foo' argument.  Likewise for %:bar.  But those are still [EMAIL PROTECTED] and
*%bar, I suspect, and people can learn that the : twigil always means
rewrite.  Hmm.  That seems to indicate that the actual signature for
named parameters is

    sub foo (:foo($foo))

and that

    sub foo ($:foo)

is just shorthand for that.  That would give us the ability to give the
variable a different name than the parameter.  I like.

    sub seek (:x($horizontal),:y($vertical))

On the other hand, it's now unclear whether you can call that as seek(1,2).
Needs to be allowed somehow.

Larry

Reply via email to