Perl-Subroutine-Signatures

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";

Perl-Subroutine-Signatures
http://example.com/2023/05/17/Perl-Subroutine-Signatures/
作者
Jie
发布于
2023年5月17日
许可协议