On Thu, 2002-04-11 at 11:55, Aaron Sherman wrote: > 1. The first default marks the beginning of optional parameters. > 2. An optional parameter with no default will automatically default to > undef.
Interestingly, I just said something that I did not mean to, but it opens up an interesting avenue. As I understand it, right now we have: sub foo ($a;$b, $c) { ... } Which indicates taht $b and $c are optional. If we go with the above defaulting rules, we could dump the semi-colon (to be re-used for something else?) in favor of: sub foo ($a, $b=undef, $c) { ... } Slightly longer, but a unifying syntax between defaulting and optional parameters! Speaking of defaults, has anyone talked about C++'s instance variable defaults? I don't like thier system, but the case of: const myobj foo(1,2,3); // C++ Is a tough one. As I understand it, in Perl that's: my $foo = myobj.new(1,2,3) but const; Or is that my $foo is myobj(1,2,3) but const; Either way, is the constructor allowed to manipulate the embryonic $foo? For those who don't know, in C++ this is resolved by the following syntax: class myobj { ... int a,b,c; myobj(int aa, int bb, int cc) : a(aa), b(bb), c(cc) const {} ... }; Notice that the constructor itself does nothing to this "const instance" that is being contstructed by the instance variable defaults. It's a fine syntactical line, and I don't like how much the compiler has to think about what C<a(aa)> really means. But, I have to admit I'm at a loss for other ways to allow safe compilation of const instantiations.