Perl 子程序省略&号和非标量返回值

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

你可能感兴趣的:(Perl 子程序省略&号和非标量返回值)