Luke Palmer wrote:

> The idea is that positional parameters are always a contiguous
> sequence in the argument list.  If it looked like this:
>
>     sub foo($x, ?$y, +$k, [EMAIL PROTECTED]) {...}
>
> Then one might presume to call it like:
>
>         foo($x,  $y,  $k, 1, 2, 3);
>
> Which they can't.  So it makes sense to have everything positional up
> front, while things that can go anywhere (but must be labeled) in the
> back.

I guess.  The most confusing part is this:

    sub foo($x, +$k, [EMAIL PROTECTED]) {...}    # (1) WRONG
    sub foo($x, [EMAIL PROTECTED], +$k) {...}    # (2) OK

    sub foo($x, +$k, *%h) {...}    # (3) OK(?)
    sub foo($x, *%h, +$k) {...}    # (4) WRONG(?)

Not only are (1) and (4) wrong, but they're always wrong... AFAICT, there's
no possible way to get $k correctly if you use those two forms.  (Or maybe
it's (1) and (3) that are wrong, or maybe both (3) and (4) are OK and only
(1) is wrong;  it depends on whether *%h is considered 'positional' or
'named'.  I'm not even remotely sure.)

So I would emphatically hope that (1) and (4) produce compile-time errors,
at minimum.  If we wanted to silently accept (1) and (4) as synonyms for
(2) and (3), that would be OK too.

But PLEASE, PLEASE make them compile-time errors if they aren't going to
work!

MikeL

Reply via email to