我刚看到代码库中的一些代码(以及它的旧代码,如Perl 3或Perl 4天),看起来像这样(我大大简化了):
@array;
push( array, $some_scalar );
请注意array
中的push()
没有@
。我会假设推送后面的代码知道第一个参数应该是数组,因此从array
typeglob中获取数组。这或多或少吗?如果Perl能够毫无问题地执行此操作,为什么还需要包含@
?
答案 0 :(得分:9)
这是解析器的旧“功能”。如果变量是包变量,则@在推送中不是必需的。许多人认为这是一个应该修复的错误。你真的不应该这样做。
答案 1 :(得分:4)
这是perl的一个可疑的“特征”,被弃用的行为;它应该是一个错误,但它确实有效。
如果打开编译器的警告( perl -W ,强烈推荐),它会发出警告:
Array @aa missing the @ in argument 1 of push() at xx.pl line 2.
答案 2 :(得分:2)