If you wanted to avoid using a hash of named arguments for whatever reason, but wanted to avoid typing my $argN="default";
$argN=shift if @_;
repeatedly, perhaps the following would be useful :
&foo (1,2,3);
sub foo {
my @defaults= qw (foo bar baz quux quuz boo);
for (1.. @_) {shift @defaults};
@_= (@_, @defaults);
($a1, $a2, $a3, $a4, $a5, $a6) = @_;
print join "\n",$a1, $a2, $a3, $a4, $a5, $a6;
}
This doesn't check that a user's supplied too many parameters, but that shouldn't be too hard to add in.
Of course, as mentioned elsewhere, this is all moot once // comes into play, but it's an interesting mental exercise.
An additional note : this assumes that parameters are given in "least optional" to "most optional"; if you have 6 params and only #2 is optional, this won't do it for you. | [reply] [d/l] [select] |