In my code, I'm been using the fairly primitive method of extraction parameters from a function call as follows:
sub addSix ($$$$$$) {
my ($a, $b, $c, $d, $e, $f) = (shift, shift, shift, shift, shift, shift);
return $a + $b + $c + $d + $e + $f;
}
print addSix (1, 2, 3, 4, 5, 6) . "\n";
(forget the primitive code, the salient bit is the multiple shift
calls).
Now that seems rather messy to me and I though Perl may have something like:
my ($a, $b, $c, $d, $e, $f) = shift (6);
or something similar.
But I cannot find anything like that. I know I can use arrays for this but I think I'd still have to unpack the array into individual scalars. That wouldn't be too bad for the example case above, where the six parameters are similar, but I'm more interested in the case where they're not really suitable as an array.
How can you extract parameters without ending up with a morass of shift
keywords?
You can simply type:
my ($a, $b, $c, $d, $e, $f) = (@_);
If you didn't have that prototype, and if that sub got called with more than six arguments, the ones after the sixth are simply "not matched", $f
would be set to the sixth argument.
If you want to catch all the arguments after the sixth, you can do it like this.
my ($a, $b, $c, $d, $e, $f, @others) = (@_);
If your list of scalars is longer than the list on the right side, the last elements will be undef
.