Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 为什么//=(定义或)对数组的作用方式与对标量的作用方式不同?_Perl_Operators - Fatal编程技术网

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
中的引用更详细。这个问题没有回答这个问题,这就是为什么数组和标量的定义方式不同?。数组和散列变量永远不能是未定义的,只能是空的,但这与错误无关。