$a,$b,$c = 1,2,3;
print "$a, $b, $c\n";
, , 1
因此,没有=(等于)的时间比元组建设更高的优先级 - 这样做呢?
$a,$b,($c=1),2,3;
$a,$b,$c = 1,2,3;
print "$a, $b, $c\n";
, , 1
因此,没有=(等于)的时间比元组建设更高的优先级 - 这样做呢?
$a,$b,($c=1),2,3;
是。有一个在perlop一个precedence table。赋值运算符是19级,并且逗号是20水平通常,Perl的运营商有相同的优先级相应的C运营商(对于那些具有一个相应的C运营商运营商)。
如果你的意思是你($a,$b,$c) = (1,2,3);
必须使用括号。
,你用它逗号操作符(在标量上下文)不是元组建筑,它是在评估了几个表达式并返回最后一个。
Perl根据上下文做了不同的事情,它根据预期的标量值,列表,什么都没有做,决定要做什么,请参阅perldoc perldata
's section on Context的介绍。
所以,如果你这样做:
perl -e '$a = (1 and 4,2,0); print"$a\n"'
你得到0
,因为4,2,0
在标量环境,其行为类似于C的逗号操作,评估逗号和返回的最后一个结果之间的表达式。
如果强制4,2,0
在列表环境进行评估:
perl -e '$a = (1 and @a=(4,2,0)); print"$a\n"'
你得到3
,因为指派给磁盘阵列势力列表上下文(附加括号是有没有办法解决所提到的优先发布CJM),和在标量上下文列表的值(通过被在标量上下文的and
的RHS被迫)是它具有的元件(在Perl逻辑and
返回最后计算的表达式,而不是一个布尔值如在其他的编程语言)的数量。
所以,CJM说,你需要做的:
($a,$b,$c) = (1,2,3);
处理优先和强制列表上下文。
通知的区别:
$ perl -e '$a,$b,$c = (7,6,8); print "$a $b $c\n"'
8
在标量上下文逗号操作符进行评价,并返回8.
$ perl -e '($a,$b,$c) = (7,6,8); print "$a $b $c\n"'
7 6 8
逗号操作符是在列表环境评估,并且返回一个列表。
$ perl -e '$a,$b,$c =() = (7,6,8); print "$a $b $c\n"'
3
逗号操作符在列表上下文中计算,返回一个列表,然后分配给$c
力标量上下文,返回列表中的元素的数量。