什么是Perl用这个论点来推动这种情况?

时间:2010-03-30 19:11:56

标签: perl

我刚看到代码库中的一些代码(以及它的旧代码,如Perl 3或Perl 4天),看起来像这样(我大大简化了):

 @array;
 push( array, $some_scalar );

请注意array中的push()没有@。我会假设推送后面的代码知道第一个参数应该是数组,因此从array typeglob中获取数组。这或多或少吗?如果Perl能够毫无问题地执行此操作,为什么还需要包含@

3 个答案:

答案 0 :(得分:9)

这是解析器的旧“功能”。如果变量是包变量,则@在推送中不是必需的。许多人认为这是一个应该修复的错误。你真的不应该这样做。

答案 1 :(得分:4)

这是perl的一个可疑的“特征”,被弃用的行为;它应该是一个错误,但它确实有效。

如果打开编译器的警告( perl -W ,强烈推荐),它会发出警告:

Array @aa missing the @ in argument 1 of push() at xx.pl line 2.

答案 2 :(得分:2)

Nicholas Clark explains

这是Perl 1语法。