Perl:Multiple=';一行中的s符号(列表和标量上下文混淆)
我在Perl教程中看到了这一行:Perl:Multiple=';一行中的s符号(列表和标量上下文混淆),perl,Perl,我在Perl教程中看到了这一行: $ret = (($i, $j, $k)=(5,6,8,9)); # 4 我不熟悉在一行中有多个class='s符号的格式。从我所读到的来看,它与上下文有关 对我来说,用另一对括号将($i,$j,$k)=(5,6,8,9)包装起来似乎很奇怪,但我将其视为在列表上下文中解释包装好的文本 但是,为什么下面的不同呢?=()=不是同样的意思吗?为什么赋值在列表上下文之前发生 $ret = () = ($i, $j, $k)=(5,6,8,9); # 3 而下面的又是
$ret = (($i, $j, $k)=(5,6,8,9)); # 4
我不熟悉在一行中有多个class='s符号的格式。从我所读到的来看,它与上下文有关
对我来说,用另一对括号将($i,$j,$k)=(5,6,8,9)
包装起来似乎很奇怪,但我将其视为在列表上下文中解释包装好的文本
但是,为什么下面的不同呢?=()=
不是同样的意思吗?为什么赋值在列表上下文之前发生
$ret = () = ($i, $j, $k)=(5,6,8,9); # 3
而下面的又是4
$ret = ($i, $j, $k)=(5,6,8,9); # 4
一个常见的误解是,以下情况将
A
分配给b
:
b=a=3
但是您不会期望以下内容将a
分配给b
,对吗
b=a+3
您必须查看=
的计算结果(返回值)
根据,
- 列表上下文中的列表赋值计算为其LHS作为左值返回的标量
- 标量上下文中的列表赋值计算为其RHS返回的标量数
赋值具有从右到左的关联性,因此
$ret = () = ($i, $j, $k) = (5, 6, 8, 9);
意味着
$i,$j,$k
)3
)$ret
同样地
$ret = ($i, $j, $k) = (5, 6, 8, 9);
意味着
$ret
$ret=(()=($i,$j,$k)=(5,6,8,9))代码>,我不明白为什么#2是“标量上下文中的列表赋值”,特别是为什么它是在标量上下文中<代码>()=($i,$j,$k)
。这里的lhs和rhs看起来都像列表。因为#3是标量赋值,标量赋值在其参数上施加了标量上下文(lhs=$ret
,rhs=#2)
$ret = ($i, $j, $k) = (5, 6, 8, 9);
2 1
$ret = ( ($i, $j, $k) = (5, 6, 8, 9) );