写“@ARGV || ='。';”有什么问题?

时间:2013-06-02 14:55:09

标签: 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.

虽然很乐意处理

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

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

  

无法修改%s中的%s

     

(F)您不得分配指定的项目或其他   尝试改变它,例如自动增量。


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

1 个答案:

答案 0 :(得分:4)

代码@ARGV无法返回数组本身及其中的元素数,因此@ARGV ||= '.';没有意义。您需要评估@ARGV两次,一次在标量上下文中(以获取元素数),一次作为左值(以获取数组本身)。

 @ARGV = @ARGV || '.';