我有以下代码:
$var //= 1;
@arr //= qw/ 1 2 3 /;
但我得到错误:
Can't modify array dereference in defined or assignment (//=) at ...
即使这个@arr ||= qw/ 1 2 3 /;
也不起作用:
Can't modify array dereference in logical or assignment (||=) at ...
但这可以按预期工作:
@arr = @arr || qw/ 1 2 3 /;
print "@arr"; # 1 2 3
答案 0 :(得分:3)
数组和哈希变量永远不能未定义,只能为空。如果我写@arr = undef
,那么@arr
将成为包含单个未定义标量的单元素数组。那不是一个未定义的数组
此表达式
@arr //= qw/ 1 2 3 /
在两个操作数上强加标量上下文。 scalar(qw/ 1 2 3 /)
为3,而scalar @arr
是@arr
中无法分配的元素数量,无论如何也永远不会被定义
要设置空数组,请使用此
@arr = qw/ 1 2 3 / unless @arr
您还可以使用条件表达式
@arr = @arr ? @arr : qw/ 1 2 3 /
答案 1 :(得分:1)
请参阅"Assignment Operators" in perldoc perlop
:
这些组合赋值运算符只能在标量上运行...