为什么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)您不得分配指定的项目或其他 尝试改变它,例如自动增量。
非常感谢对这种行为更加人性化的解释。
答案 0 :(得分:4)
代码@ARGV
无法返回数组本身及其中的元素数,因此@ARGV ||= '.';
没有意义。您需要评估@ARGV
两次,一次在标量上下文中(以获取元素数),一次作为左值(以获取数组本身)。
@ARGV = @ARGV || '.';