我刚才看到在我们的代码库的一些代码(和它的老代码,如Perl的3或Perl 4天),看起来像这样(我大大简化):Perl在这种情况下用这个参数来推动什么?
@array;
push(array, $some_scalar);
注意,array
在push()
没有@
。我会假设推后面的代码知道第一个参数应该是数组,因此可以从array
typeglob获取数组。那或多或少呢?如果Perl能够毫无问题地完成这项工作,那么为什么你需要包含@
呢?
我刚才看到在我们的代码库的一些代码(和它的老代码,如Perl的3或Perl 4天),看起来像这样(我大大简化):Perl在这种情况下用这个参数来推动什么?
@array;
push(array, $some_scalar);
注意,array
在push()
没有@
。我会假设推后面的代码知道第一个参数应该是数组,因此可以从array
typeglob获取数组。那或多或少呢?如果Perl能够毫无问题地完成这项工作,那么为什么你需要包含@
呢?
这是解析器的一个老'功能'。如果变量是包变量,则@不是必需的。许多人认为这应该是固定的错误。你真的不应该这样做。
这是perl的一个可疑的“特性”,不推荐使用的行为;它应该是一个错误,但它的工作原理。
如果你打开编译器(perl的-W,强烈推荐)的警告,它警告说:
Array @aa missing the @ in argument 1 of push() at xx.pl line 2.
这是Perl的1个语法。
使用'use warnings'运行此代码,看看是否回答你的问题。 – mob 2010-03-30 19:15:39
关于这个旧代码的警告将是一场无法解决的灾难,但我明白你的观点。 – Morinar 2010-03-30 19:18:09
@Monirar:如果你不得不维护这段代码,改进它来运行警告启用可能证明非常有用。 – 2010-03-30 19:27:25