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)


is short for


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.


Reply via email to