我使用||=
运算符为变量提供默认值,例如
$x ||= 1;
我尝试将此语法与数组一起使用但出现语法错误:
@array||= 1..3;
Can't modify array dereference in logical or assignment (||=) ...
它是什么意思,我应该如何为数组提供默认值?
答案 0 :(得分:18)
因为||
是标量运算符。如果@array||= 1..3;
有效,它会在标量上下文中评估1..3
,这不是您想要的。它还在标量上下文中评估数组(这是好的,因为标量上下文中的空数组是假的),除了你不能分配给scalar(@array)
。
要指定默认值,请使用:
@array = 1..3 unless @array;
但请注意,没有办法区分从未初始化的数组和已分配空列表的数组。它不像标量,您可以在其中区分undef
和空字符串(尽管||=
不区分它们。)
答案 1 :(得分:16)
这个page有一个很好的解释,imho:
op =可以在任何两个之间发生 表达式,而不仅仅是var和an 表达式,但左边的必须是 标量语境中的左值。因为
@x ||= 42
相当于scalar(@x) = @x || 42
,而你却不是 允许使用scalar(@x)
作为 左值,你得到一个错误。