首页›文章›perl 函数前的&符号

perl 函数前的&符号

计算机技术 · perl 程序开发2011-11-200次浏览0 个评论

什么时候可以在在调用子程序时省略掉“&”?如果编译器在调用之前知道此子程序的定义,或者Perl 从语法中能知道这是一个子程序调用,则子程序前的符号&是可以省略的,像使用内嵌(built-in)函数一样。这意味着如果Perl 能通过语法就能判断其是否为子程序调用。例如,如果用括号将一些参数括起来,那其为函数调用:
在下例中,其调用的子程序为&shuffle。但它可能是一个内嵌的函数。

perl
my @cards = shuffle(@deck_of_cards); # &是不必要的

如果Perl 内部的编译器知道此子程序的定义,则可以省掉其参数的括号:

perl
sub division{
$_[0] / $_[1]; #第一个参数除以第二个参数
}
my $quotient = division 355, 113; #可以省略掉括号

上述代码能正常运行,因为如果加上括号不能改变其含义,那括号就是可选的。但不要将上述子程序的声明放在调用函数的后面,否则编译器不知道调用division 是什么意思。编译器需在调用前知道其定义,那样就可以将它当作内嵌(built-in)的函数看待了。
如果子程序和Perl 一个内嵌程序同名,则必须使用&来调用它。编译器将在调用之前检查其定义,而非直接将它当作内嵌的函数来处理。加上&,可以确保你调用了此子程序;不加,则仅当没有同名的内嵌函数时才能调用到它:

perl
sub chomp {
print "Munch, Munch!\n";
}
&chomp; #此处的&是必须的

如果没有&,我们将调用内嵌的函数chomp,虽然已经定义了子程序&chomp。因此,实际的使用规则是:除非知道Perl 所有的内嵌函数,否则函数调用时都应当使用&。这即是说在你头几百个程序都应当使用&。但如果你看到某人的代码中省略掉了&,这并非一定是错误;可能他们知道Perl 没有具有相同名字的内嵌函数。

评论

0

评论加载中…

发表评论

0/2000