A function in Perl begins with the keyword sub followed by a
name. The interesting feature of functions in Perl is that there is
no explicit declaration of the list of arguments to the function.
When a function is invoked, the list of arguments, if any, is made
available to the function in a specially named list, @_
. The
function can then shift through @_
to extract all the
values that are passed to it.
For instance, here is a function that returns the maximum of exactly two values:
sub max { my ($a,$b,@rest) = @_; # Get first arguments from @_ in $a, $b if ($a > $b) {return $a}; return $b; }
This function does not check whether @_
does in fact have two
valid values. No matching is done while invoking a function, since
there is no template associated with a function. Thus, the
function max defined above could be invoked, legally, as
max(), or max(1) or max($x,$y)
or
max(@list)
or .... Here is a more generic version of max,
that works ``properly'' provided it has at least one argument. Recall
that for an array @list, the value @list in scalar
context gives the length of the array.
sub max { my ($tmp); # Declare $tmp as a local variable unless (@_) return 0; # Return 0 if input list is empty my $max = shift @_; # Set $max to first value in @_ while (@_){ # Compare $max to each element in @_ $tmp = shift @_; if ($tmp > $max){$max = $tmp;} } return $max; }