0

可能重复:
什么时候应该使用 & 来调用 Perl 子例程?

我是 Perl 开发的新手,只是通过示例代码。

我遇到了 &LogIt() ,我有几个基本问​​题要开始。我从 Google 获得了信息,例如它会将错误/消息记录到日志文件中。

&LogIt("Failed to create folder."); 

在上面的代码中,'&'代表什么?&LogIt() 和 LogIt() 之间有什么区别/影响吗?msg“创建文件夹失败”会打印在某处吗?谁会使用这个味精?

请让我知道一些关于 &LogIt() 的基础知识。

4

2 回答 2

3

这具有考古价值。与号用于调用子程序。您将在该页面上找到所有血淋淋的细节。

它仍然有效,但不应使用,除非非常特殊的情况(如引用子例程或检查它是否已定义)。

请注意,&foo&foo()不是同一个意思。后者从括号中获取参数(或者没有,如果没有提供)。前者不能用参数调用,而是将 的当前值@_作为参数。因此,以下块:

@_ = ( 10, 20 ) ;
&foo( ) ;
&foo ;

sub foo { print "args=$_[0], $_[1]\n" ; }

将产生以下输出:

args=, 
args=10, 20
于 2012-10-15T09:56:31.717 回答
0

函数前面的&行为就像$标量前面的。它是解释器告诉特定变量是什么的标志。

但是,如果您有括号,则不需要使用函数。因此&foo &foo()foo()意思几乎相同。

它们之间的区别在于传递给函数的参数。调用不foo()传递任何参数。调用&foo将当前传递@_给 foo。

显式和使用印记的好处是你可以()在使用它时省略空的。例如

&foo
foo()

如果foo不检查其参数或当前@_是否为空。

或者如果你必须打电话foo(@_),你可以简单地写

`&foo`

但是我想说,()即使在不需要它的情况下,许多 perl 程序员仍然倾向于使用它,因为唯一具有可选括号的其他语言(据我所知)是 COBOL。

只需决定您是否打算使用&整个代码库并坚持下去!否则阅读起来可能会令人困惑(或烦人)。

于 2012-10-15T09:55:31.843 回答