On Mon, Mar 07, 2005 at 07:50:47PM -0800, Larry Wall wrote:
> On Mon, Mar 07, 2005 at 05:37:53PM -0800, David Storrs wrote:
> : On Mon, Mar 07, 2005 at 04:58:29PM -0800, Larry Wall wrote:
> : Is
> : there is then any way to explicitly leave off an element.  Can I do
> : this:
> : 
> :     sub foo( Int @a is shape(3) ) { ... }
> :     foo(1, 2, undef);
> 
> That's illegal unless you either * the @a or [] the list.  

Argh.  My bad, I meant to * the @a.  Ok, rewrite; is THIS legal?:

        sub foo( Int [EMAIL PROTECTED] is shape(3) ) { ... }
        foo(1, 2, undef);

The sense I'm trying to convey is:

    "Here is my sub.  It takes three ints."

    "Here is me calling the sub.  I am giving you only two ints and
    explicitly telling you [by explicitly passing undef] that I meant
    to do that so just take it and be quiet."

To put it another way...in perl5, a sub that was prototyped to take 
three scalar args will throw an error when you pass only two but will
accept it if you pass two plus an explicit undef.  On the other hand,
if it was prototyped to take an array there is no way to tell the
difference between an explicitly-passed undef and a too-short arg
list.  How will P6 handle these two scenarios?

--Dks

Reply via email to