gpt4 book ai didi

perl - 为什么语法 `&name arg1 arg2 ...` 不能用于调用 Perl 子程序?

转载 作者:行者123 更新时间:2023-12-03 16:53:49 28 4
gpt4 key购买 nike

对于 Perl 子程序,如果传递 0 个参数,我可以使用 4 种形式来调用它。但是如果传递 1 个或多个参数,则有一种形式我无法使用,请参见下文:

sub name
{
print "hello\n";
}
# 4 forms to call
name;
&name;
name();
&name();

sub aname
{
print "@_\n";
}
aname "arg1", "arg2";
#&aname "arg1", "arg2"; # syntax error
aname("arg1", "arg2");
&aname("arg1", "arg2");

错误输出是
String found where operator expected at tmp1.pl line 16, near "&aname "arg1""
(Missing operator before "arg1"?)
syntax error at tmp1.pl line 16, near "&aname "arg1""
Execution of tmp1.pl aborted due to compilation errors.

有人可以从编译器的角度解释错误输出吗?我不明白为什么它会提示缺少运算符(operator)。

谢谢

最佳答案

它记录在 perlsub 中:

To call subroutines:

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


&NAME "arg" , perl 看到 &NAME() "ARG" ,所以它认为子调用和“ARG”之间缺少一个运算符。

在 Perl 5 中,您不需要 &大多数情况下。

关于perl - 为什么语法 `&name arg1 arg2 ...` 不能用于调用 Perl 子程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39610261/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com