找回密码
 注册
查看: 3028|回复: 0

perl中操作符优先级和结合性

[复制链接]
发表于 2011-11-13 09:55:20 | 显示全部楼层 |阅读模式
操作符的优先级规定哪部分先进行预算。例如,表达式2+3*4,是先进行加呢还是先进行乘?如果先进行加,得到5*4,20。
如果先进行乘(同数学课中学到的一样),将得到2+12,等于14。幸运的是,Perl 中的定义和数学上的一样,先进行乘。
由此,我们可以说乘法比加法的优先级更高。
可以使用括号来改变优先级。括号中的表达式将首先被计算(和数学课中学到的一样)。因此,如果想加法先进行,可以使
用(2+3) * 4,得到20。如果想先进行乘,可以使用2 + (3*4),当然此时括号不是必需的。
乘法和加法的优先级是比较容易确定的,但字符串连接符和幂运算的优先级就不是那么明显的。恰当的方法是查看Perl 的
优先级表,如表2-2◆.(一些操作符没在此表中列出,要查看详细信息,可参考Perl 的用户手册)。
◆C 和Perl 中都有的操作符有相同的优先级,这对C 程序员是一个好消息。
操作符的优先级和结合性(由高到低)
结合性操作符
左括号和列表操作符的参数
左->
++ --(自增和自减)
右**
右\ ! ~ + - (一元操作符)
左=~ !~
左* / % x
左+ - . (二元操作符)
左<< >>
Named unary operators (-X filetests, rand)
< <= > >= lt le gt ge(“不等的”)
= = != <=> eq ne cmp(“相等的”)
左&
左| ^
左&&
左||
.. …
右?三元操作符)
右= += -= .=
左, =>
List operators(rightward)
右not
左And
左or xor
上表中,上面的操作符比下面的操作符优先级更高。同一优先级的操作符由结合性来决定计算顺序。
同优先级类似,结合性是用来规定有相同优先级的操作符的计算顺序:
4** 4** 2 #4**(3**2)
72/12/3 #(72/12)/3
36/6*3 #(36/6)*3
在第一条中,**是右结合的,所以右边的先进行计算。同样的,由于* /是左结合的,所以左边的先进行运算。
那么,需要记住优先级表吗?不需要!事实上没有人那样做。如果记不住优先级时,可以使用括号。毕竟,如果你不知道
其优先级顺序,那很可能程序的维护者也记不住。因此,应当善待他/她,因为那个人很可能就是你!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-23 16:25 , Processed in 0.029905 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表