我有以下代码:
$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
最佳答案
数组和哈希变量永远不能未定义,只能为空。如果我写 @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 /
关于perl - 为什么//=(定义或)对于数组的工作方式与对于标量的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44925354/