Subroutines
The most basic form of a subroutine
is simply the sub
keyword, followed by the name of the
sub, followed by the block that defines the sub:
sub alert {
print "We have normality.";
}In a simple sub, all arguments are passed in the
@_
array:
sub sum {
my $sum;
for @_ -> $number {
$sum += $number;
}
return $sum;
}Formal Parameters
Perl 6 subroutines can define named formal parameters. The parameter list is part of the subroutine definition, often called the “signature” of the subroutine:
sub standardize ($text, $method) {
my $clean;
given $method {
when 'length' { $clean = wrap($text, 72); }
when 'lower' { $clean = lowercase($text); }
...
}
return $clean;
}Subroutine parameter lists are non-flattening. Any array or hash passed into a subroutine is treated as a single parameter. An array in the signature expects to be passed an actual array or arrayref, and a hash expects a hash or hashref:
sub whole (@names, %flags) {
...
}
# and elsewhere
whole(@array, %hash);To get the old-style behavior where the elements of an array (or the
pairs of a hash) flatten out into the parameter list, use the
flattening operator in the call to the subroutine. Here,
$first is bound to @array[0]
and $second is bound to
@array[1]:
sub flat ($first, $second) {
...
}
flat(*@array);To make an array (or hash) in the parameter list slurp up all the arguments passed to it, use the flattening operator in the signature definition. These are known as variadic parameters because they can take a variable number ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access