可能重复: 什么时候应该使用&调用Perl子例程?
我对Perl开发很陌生,只需要看一看示例代码。
我遇到了&LogIt(),首先我几乎没有什么基本问题要问。我从Google获得信息,就像它将错误/msgs记录到日志文件中一样。
&LogIt("Failed to create folder."); 在上面的代码中,'&‘代表什么?在&LogIt()和LogIt()之间有什么区别/影响吗?msg“未能创建文件夹”会在某个地方打印吗?谁会用这个味精?
请告诉我一些关于&LogIt()的基本知识。
发布于 2012-10-15 09:56:31
这具有考古价值。符号被用来调用子例程。你会发现所有血淋淋的细节在那一页上。
它仍然有效,但不应该使用,除非是非常特殊的情况(比如引用子例程或检查它是否已定义)。
请注意,&foo和&foo()的含义并不相同。后者从括号中获取参数(如果没有提供,则为none )。前者不能用参数调用,而是以@_的当前值作为参数。因此,以下块:
@_ = ( 10, 20 ) ;
&foo( ) ;
&foo ;
sub foo { print "args=$_[0], $_[1]\n" ; }将产生以下产出:
args=,
args=10, 20发布于 2012-10-15 09:55:31
函数前面的&就像标量前面的$一样。它是解释器告诉特定变量是什么的信号。
但是,对于函数,如果有括号,则不需要它。因此,&foo &foo()和foo()的含义几乎相同。
它们之间的区别在于传递给函数的参数。对foo()的调用不传递任何参数。对&foo的调用将当前@_传递给foo。
显式和使用sigil的优点是在使用空()时可以省略它。例如
&foo
foo()如果foo不检查它的参数,或者当前的@_是空的。
或者,如果您必须调用foo(@_),您可以简单地编写
`&foo`然而,我要说的是,许多perl程序员仍然倾向于使用(),即使在不需要它的情况下也是如此,因为只有COBOL是唯一具有可选括号的语言(我知道)。
只需决定是否打算在整个代码库中使用&,并坚持使用它!!否则,阅读可能会令人费解(或烦人)。
https://stackoverflow.com/questions/12893148
复制相似问题