Subroutine Signature 是在 Perl v5.20 中添加的新特性.
如:
1 2 3 4 5 6
| use v5.20; use experimental qw(signatures);
sub max ( $m, $n ) { if ($m > $n) { $m } else { $n } }
|
此时, 若传递三个参数则会报错.
处理过多参数, 可以写为:
1 2 3 4 5 6 7 8
| sub max ( $max_so_far, @rest ) { foreach (@rest) { if ($_ > $max_so_far) { $max_so_far = $_; } } $max_so_far; }
|
或:
1 2 3 4 5 6 7 8
| sub max ( $max_so_far, @ ) { foreach (@_) { if ($_ > $max_so_far) { $max_so_far = $_; } } $max_so_far; }
|
处理过少参数, 可以设置默认值:
1 2 3 4 5 6 7 8 9 10 11
| sub list_from_fred_to_barney ( $fred = 0, $barney = 7 ) { if ($fred < $barney) { $fred..$barney } else { reverse $barney..$fred } }
my @defaults = list_from_fred_to_barney(); my @default_end = list_from_fred_to_barney( 17 );
say "defaults: @defaults"; say "default_end: @default_end";
|