Perl 为什么//=(定义或)对数组的作用方式与对标量的作用方式不同?
我有以下代码:Perl 为什么//=(定义或)对数组的作用方式与对标量的作用方式不同?,perl,operators,Perl,Operators,我有以下代码: $var //= 1; @arr //= qw/ 1 2 3 /; 但我得到了一个错误: 无法在… 甚至这个@arr | |=qw/1 2 3/不起作用: 无法在…处修改逻辑或赋值(| |=)中的数组解引用。 但这是意料之中的: @arr = @arr || qw/ 1 2 3 /; print "@arr"; # 1 2 3 见: 这些组合赋值运算符只能对标量进行运算 数组和哈希变量永远不能未定义,只能为空。如果我写@arr=undef,那么@arr将成为一个包含单个未定
$var //= 1;
@arr //= qw/ 1 2 3 /;
但我得到了一个错误:
无法在…
甚至这个@arr | |=qw/1 2 3/代码>不起作用:
无法在…处修改逻辑或赋值(| |=)中的数组解引用。
但这是意料之中的:
@arr = @arr || qw/ 1 2 3 /;
print "@arr"; # 1 2 3
见:
这些组合赋值运算符只能对标量进行运算
数组和哈希变量永远不能未定义,只能为空。如果我写@arr=undef
,那么@arr
将成为一个包含单个未定义标量的单元素数组。这不是一个未定义的数组
这句话
@arr //= qw/ 1 2 3 /
@arr = @arr ? @arr : qw/ 1 2 3 /
对两个操作数施加标量上下文scalar(qw/1 2 3/)
是3,而scalar@arr
是@arr
中无法分配且永远无法定义的元素数
要设置空数组,请使用以下命令
也可以使用条件表达式
@arr //= qw/ 1 2 3 /
@arr = @arr ? @arr : qw/ 1 2 3 /
另见:@a=@b | |@c
真正的意思是@a=scalar(@b)| |@c
@Dada:如果操作数是在标量上下文中测试的,那么它将非常方便,但返回它们的原样
鉴于您正在回答自己的问题,您可能需要花一些精力来解释为什么部分,比perlop
中的引用更详细。这个问题没有回答这个问题,这就是为什么数组和标量的定义方式不同?。数组和散列变量永远不能是未定义的,只能是空的,但这与错误无关。