Perl5=(等于)运算符优先级
返回Perl5=(等于)运算符优先级,perl,equals,operator-precedence,Perl,Equals,Operator Precedence,返回 $a,$b,$c = 1,2,3; print "$a, $b, $c\n"; 那么=(equals)是否比元组构造具有更高的优先级-这样做 , , 1 对。有一个在里面。赋值运算符为级别19,逗号为级别20。通常,Perl的运算符与相应的C运算符具有相同的优先级(对于具有相应C运算符的运算符) 如果你的意思是($a,$b,$c)=(1,2,3)必须使用参数。在标量上下文中使用的逗号运算符不用于元组构造,而是用于计算多个表达式并返回最后一个表达式 Perl根据上下文做不同的事情,
$a,$b,$c = 1,2,3;
print "$a, $b, $c\n";
那么=(equals)是否比元组构造具有更高的优先级-这样做
, , 1
对。有一个在里面。赋值运算符为级别19,逗号为级别20。通常,Perl的运算符与相应的C运算符具有相同的优先级(对于具有相应C运算符的运算符)
如果你的意思是
($a,$b,$c)=(1,2,3)代码>必须使用参数。在标量上下文中使用的逗号运算符不用于元组构造,而是用于计算多个表达式并返回最后一个表达式
Perl根据上下文做不同的事情,它根据是否需要一个标量值、一个列表、什么都没有……来决定做什么。。。请参阅以获取介绍
因此,如果你这样做:
$a,$b,($c=1),2,3;
您将得到0
,因为4,2,0
是在标量上下文中计算的,其行为类似于C的逗号运算符,在逗号之间计算表达式并返回最后一个表达式的结果
如果强制在列表上下文中计算4,2,0
:
perl -e '$a = (1 and 4,2,0); print"$a\n"'
您会得到3
,因为分配给数组会强制列表上下文(附加括号用于解决前面提到的优先问题cjm),而标量上下文中列表的值(通过标量上下文中和
的RHS强制)是它拥有的元素数(Perl中的logical和
返回最后计算的表达式,而不是其他编程语言中的布尔值)
因此,正如cjm所说,您需要:
perl -e '$a = (1 and @a=(4,2,0)); print"$a\n"'
处理优先级和强制列表上下文
请注意以下两者之间的区别:
($a,$b,$c) = (1,2,3);
逗号运算符在标量上下文中求值,并返回8
$ perl -e '$a,$b,$c = (7,6,8); print "$a $b $c\n"'
8
逗号运算符在列表上下文中求值,并返回一个列表
$ perl -e '($a,$b,$c) = (7,6,8); print "$a $b $c\n"'
7 6 8
逗号运算符在列表上下文中求值,返回一个列表,然后对$c
的赋值强制标量上下文,返回列表中的元素数
$ perl -e '$a,$b,$c = () = (7,6,8); print "$a $b $c\n"'
3