Stuart Cook wrote:

>On 10/10/05, Austin Hastings <[EMAIL PROTECTED]> wrote:
>  
>
>>What about whitespace?
>>
>>  foo (a => 42); # Note space
>>
>>Is that the first case (subcall with named arg) or the second case (sub
>>with positional pair)?
>>    
>>
>
>Sub with positional pair, since the parens aren't call-parens (because
>of the space), so they protect the pair.  It would probably be prudent
>to emit a warning in this case, for obvious reasons.  (Actually, this
>is one of the major problems with using parens to protect pair args.)
>
>  
>
So to pass a hash that has one element requires using the <c>hash</c>
keyword?

Specifically, if I say:

  @args = (a => 1, get_overrides());

Then can I say

  foo([EMAIL PROTECTED]);

Or will I, in the case of no overrides, get a positional pair instead of
named a =>1 ?


>>What's the most complete way to get the sub's arguments?
>>
>>That is, for a sub that takes positional, optional, named, and variadic
>>(*) arguments, what's the best mechanism for grabbing the entire call?
>>    
>>
>
>As far as I know there currently *isn't* a concise way to
>capture/forward all (or some) of a sub's arguments; the closest thing
>is:
>
>  sub foo([EMAIL PROTECTED], *%named) { bar([EMAIL PROTECTED], *%named) }
>
>Which is ugly and unwieldy.  I believe Luke was considering some kind
>of 'unified arg-list object' which you could use to slurp and splat
>entire argument lists, like so:
>
>  sub foo(*$args) { bar(*$args) }
>
>But I don't think it's been posted to the list yet.
>
>  
>

It seems like positionals, if specified, should appear as pairs in
[EMAIL PROTECTED]
unless a hash is also present. That is, @_ or its replacement as the
collection-of-all-arguments-given should be a list, for positionalness,
and should include pairs when necessary.

=Austin

Reply via email to