2012-10-15 211 views
0

可能重复:
When should I use the & to call a Perl subroutine?基础上与Logit模型()

我是新来的Perl的开发,只是通过一个实例代码去。

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

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

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

请让我知道一些最基本的内容& Logit模型()。

+0

确定。我会指出这一点。谢谢! –

回答

3

这是考古价值。和号用于调用子程序。你会发现所有的血淋淋的细节on that page

它仍然有效,但不应该使用,除了非常特殊的情况下(如参照子程序或检查它是否被定义或没有)。

请注意,&foo&foo()并不意味着同样的事情。后者采用括号中的参数(如果没有提供,则没有参数)。前者不能用参数调用,但将当前值@_作为参数。因此,下面的块:

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

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

将产生以下输出:

args=, 
args=10, 20 
+0

感谢您的链接和解释! –

0

函数前面的&的行为与标量前面的$相似。解释者告诉特定变量是什么是一个印记。

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

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

明确和使用印记的好处是您可以在使用时省略空的()。例如

&foo 
foo() 

如果foo没有检查它的参数,或者如果当前@_是空的。

或者,如果你要调用foo(@_)可以简单的写

`&foo` 

但是我要说的是许多Perl程序员仍然倾向于在的情况下,即使使用()时不要求作为唯一的其他语言(我知道)有可选的括号是COBOL。

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

+1

这是不正确的。 '&foo'和'&foo()'不一样;前者传递当前的'@ _'作为参数的隐式列表。 – January

+0

是的,我忘记了,我很抱歉,正在更新 – jozefg