Hi, Dave Whipp wrote: > Austin Hastings wrote: >> How about "perl should DWIM"? In this case, I'm with Juerd: splat >> should pretend that my array is a series of args. >> >> So if I say: >> >> foo [EMAIL PROTECTED]; >> >> or if I say: >> >> foo([EMAIL PROTECTED]); >> >> I still mean the same thing: shuck the array and get those args out >> here, even the pairs. > > The trouble is, an array doesn't contain enough information: > > Compare: > foo( (a=>1), b=>2 ); > > With > @args = ( (a=>1), b=>2 ); > foo( [EMAIL PROTECTED] );
my @args = ( (a => 1), b => 2 ); # is sugar for my @args = ( (a => 1), (b => 2) ); # We can't stuff named arguments into an array, only pairs. # Named arguments are neither objects nor some other data type, # they're purely syntactical. > If we have an arglist ctor, then we could have > > @args = arglist( (a=>1), b=>2 ); > foo( [EMAIL PROTECTED]); > > say @args.perl > ## ( > ## (a=>1) but is_positional, > ## (b=>2) but is_named, > ## ) > > > but without such a constructor, it would be difficult to DWIM > correctly. Yep, see Luke's tuple proposal [1]: my $tuple = ( (a => 1), b => 2 ); foo *$tuple; # same as foo( (a => 1), b => 2 ); # one positional argument (a Pair) and # the named parameter "b" --Ingo [1] http://svn.openfoundry.org/pugs/docs/notes/theory.pod /Tuples