7. 省略&号
- Perl 通过语法规则判断只能是子程序调用,就可以像内置函数那样省略与号。
- 如果 Perl的内部编译器已经见到过子程序的定义,那么通常也可以省略与号。
- Perl子程序和内置函数同名,就必须使用与号调用。
- 最好永远不要省略&号,避免歧义。
my @cards = shuffle(@deck_of_cards); # &shuffle上的 &是多余的
sub division {
$_[0]/$_[1];
}
my $quotient = division(355, 113); # 用之前定义的 &division
print $quotient . "\n";
sub chomp {
print "Munch, munch!\n";
}
&chomp; #必须使用 &,绝不能省略,内置函数歧义
8. 非标量返回值
- 子程序不仅可以返回标量值,如果在列表上下文中调用它,还可以返回列表值。
- wantarray函数测试,为真时返回列表,为假时返回标量。
- 单写一个 return不给任何参数时,在标量上下文中的返回值就是 undef,在列表上下文中则是空列表。
my $fred = 11;
my $barney = 6;
my @array_rev = &list_from_fred_to_barney;
$" = ",";
print "@array_rev \n";
sub list_from_fred_to_barney {
if ($fred < $barney) {
$fred..$barney;
} else {
reverse $barney..$fred;
}
}
网友评论