Perl子程序与"&"之间有什么区别? (&符号),没有

时间:2014-03-12 13:53:36

标签: perl subroutine

Perl中接下来的两行之间有什么区别:

PopupMsg("Hello");

&PopupMsg("Hello");

...

sub PopupMsg
{
    subroutines code here...
}

请注意,在某些情况下,我必须使用第一行,而在某些情况下,第二行,否则我会收到错误。

2 个答案:

答案 0 :(得分:5)

使用和号&调用子程序是不好的做法。只要您使用括号或将符号预先声明为子例程名称,调用就可以正常编译。

当您将子例程作为数据项处理时,必须使用&符号,例如对其进行引用。

my $sub = \&PopupMsg;

答案 1 :(得分:2)

请参阅http://perldoc.perl.org/perlsub.html

NAME(LIST);  # & is optional with parentheses.
NAME LIST;   # Parentheses optional if predeclared/imported.
&NAME(LIST); # Circumvent prototypes.
&NAME;       # Makes current @_ visible to called subroutine.

原型在http://perldoc.perl.org/perlsub.html#Prototypes中进一步解释。