【问题标题】:What's wrong with writing "@ARGV ||= '.';"? [duplicate]写“@ARGV ||= '.';”有什么问题? [复制]
【发布时间】:2013-06-03 00:49:21
【问题描述】:

为什么 Perl 会在下面的 sn-p 上出现问题?

$ 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) 您不得分配给指定的项目,或以其他方式 尝试更改它,例如使用自动增量。


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

【问题讨论】:

标签: perl


【解决方案1】:

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

 @ARGV = @ARGV || '.';

【讨论】:

  • 出色的答案使问题一目了然。谢谢池上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2019-04-11
  • 2016-04-15
  • 2016-03-20
  • 2020-06-17
  • 1970-01-01
相关资源
最近更新 更多