Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
Arrays 为什么这些分配数组/列表的不同方法会产生不同的值?_Arrays_Perl - Fatal编程技术网

Arrays 为什么这些分配数组/列表的不同方法会产生不同的值?

Arrays 为什么这些分配数组/列表的不同方法会产生不同的值?,arrays,perl,Arrays,Perl,输出: $x=10,$y=3,$z=8 为什么$x、$y、$z的值不同? 为什么$z值不等于@rt的大小 @rt = (10,9,8); my ($x)=@rt; $y = @rt; $z = (10,9,8); print "\$x=$x,\$y=$y,\$z=$z\n"; 为什么将数组分配给标量时差别不大,但有不同的值?这让我觉得Perl很乏味,或者在编写代码时需要小心。请对此发表评论 左侧的变量列表(列表上下文)和右侧的列表分配相应的项。左侧的第一个也是唯一一个项目从列表中获取第一个项目

输出: $x=10,$y=3,$z=8

为什么$x、$y、$z的值不同? 为什么$z值不等于@rt的大小

@rt = (10,9,8);
my ($x)=@rt;
$y = @rt;
$z = (10,9,8);
print "\$x=$x,\$y=$y,\$z=$z\n";

为什么将数组分配给标量时差别不大,但有不同的值?这让我觉得Perl很乏味,或者在编写代码时需要小心。请对此发表评论

左侧的变量列表(列表上下文)和右侧的列表分配相应的项。左侧的第一个也是唯一一个项目从列表中获取第一个项目:

$x = $rt[0]
$y = Scalar(@rt)
$z = $rt[2]
左边是标量,右边是列表。列表在标量上下文中计算,并转换为其长度:

my ($x)=@rt;  # x = rt[0]
最后一个是,在标量上下文中,它计算为右侧的最后一项

$y = @rt;  # y = size of rt

Perl有两个不同的赋值运算符,一个标量赋值运算符和一个列表赋值运算符。赋值的语法基础是左边出现的内容;如果是数组、散列、切片或括号表达式,则为列表赋值;否则,它是一个标量赋值。列表赋值给出了正确的操作数列表上下文;标量赋值提供了正确的操作数标量上下文

一次一个:

$z = (10,9,8); # z = 8;
列表分配。右操作数获取列表上下文。列表上下文中的逗号运算符组合一个列表,然后将其分配到数组中

@rt = (10,9,8);
列表分配。右操作数获取列表上下文;列表上下文中的数组生成其元素的列表,这些元素被分配到作为列表赋值左操作数的列表中。由于该列表只有一个标量元素,因此只有数组的第一个元素最终被分配,而从数组生成的列表的其余元素将被丢弃

my ($x) = @rt;
标量赋值。右操作数获取标量上下文;标量上下文中的数组生成其长度,该长度分配给赋值左侧的变量

$y = @rt;

标量赋值。右操作数获取标量上下文。标量上下文中的逗号运算符丢弃其左操作数,只返回其右操作数,因此赋值的左操作数的值只是数字8,它被赋值到赋值左边的变量中。

因为它是perl。。这三种形式是不同的。这一部分值得回答。然而,对perl进行“评论”的请求是乏味的,或者需要更多的注意,这并不是对第一个问题的好补充。“数组”是变量类型,而不是值类型。值是标量或列表。几乎所有编程语言在编码时都需要小心。
$y = @rt;