写"@ARGV || ='.';"有什么问题?

Zai*_*aid 7 perl

为什么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.
Run Code Online (Sandbox Code Playgroud)

虽然它很愉快地处理

$ perl -Mstrict -wE '@ARGV = @ARGV || ".";'
Run Code Online (Sandbox Code Playgroud)

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

无法修改%s中的%s

(F)您不得分配给指定的项目,或以其他方式尝试更改它,例如自动增加.


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

ike*_*ami 4

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

 @ARGV = @ARGV || '.';
Run Code Online (Sandbox Code Playgroud)