perl – 写“@ARGV || =’.’;”有什么问题?

参见英文答案 > Why doesn’t ||= work with arrays?2个
为什么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的解释在这里有多大帮助:

Can’t modify %s in %s

(F) You aren’t allowed to assign to the item indicated,or otherwise
try to change it,such as with an auto-increment.

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

解决方法

代码@ARGV不可能同时返回数组本身及其中的元素数,所以@ARGV || =’.’;没有意义.你需要评估@ARGV两次,一次是在标量上下文中(以获得元素数),一次是作为左值(以获得数组本身).
@ARGV = @ARGV || '.';

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...