7

为什么 Perl 会在下面的代码片段中出现问题?

$ perl -Mstrict -wE '@ARGV ||= ".";'
Can't modify array dereference in logical or assignment (||=) at -e line 1, near "'.';"
Execution of -e aborted due to compilation errors.

虽然它愉快地处理

$ perl -Mstrict -wE '@ARGV = @ARGV || ".";'

我看不到perldiag这里的解释有多大帮助:

无法修改 %s 中的 %s

(F) 不允许您分配指定的项目,或尝试以其他方式更改它,例如使用自动增量。


非常感谢对这种行为进行更人性化的解释。

4

1 回答 1

4

代码不可能@ARGV同时返回数组本身和其中的元素数量,因此@ARGV ||= '.';没有任何意义。您需要计算@ARGV两次,一次在标量上下文中(以获取元素的数量),一次作为左值(以获取数组本身)。

 @ARGV = @ARGV || '.';
于 2013-06-02T16:49:21.187 回答