После выделения и вычисления термов выражение разбирается с целью выявления последовательности выполнения операций в выражении: какая из них должна быть выполнена раньше другой. Это достаточно ответственная процедура, так как порядок выполнения операций существенно влияет на результат вычисления всего выражения. Например, результатом вычисления выражения
4+3*2
будет 14, если сначала выполнить сложение, а потом умножение, и ю, если сначала выполнить умножение, а потом сложение. Дабы избежать подобных двусмысленностей в языках программирования, вводится приоритет, или старшинство операций, который учитывается при вычислении выражения. Приоритет операции умножения выше приоритета сложения, а поэтому наше арифметическое выражение будет однозначно вычислено равным ю.
В табл. 4.4 представлены все операции Perl в порядке убывания их приоритета, в ней также рпределен порядок выполнения операций с одинаковым приоритетом (столбец Сочетаемость).
Таблица 4.4. Приоритет и сочетаемость операций Perl
Приоритет |
Операция |
Сочетаемость |
1 |
Вычисление термов и левосторонних списковых операций |
Слева направо |
2 |
-> |
Слева направо |
3 |
++ -- |
Не сочетаются |
4 |
* * |
Справа налево |
5 |
! ~ \ унарные + и - |
Справа налево |
6 |
=~ ! = |
Слева направо |
7 |
* / % х |
Слева направо |
8 |
+ - . |
Слева направо |
9 |
« » |
Слева направо |
10 |
Именованные унарные операции |
Не сочетаются |
11 |
<><=>= It gt le ge |
Не сочетаются |
12 |
== != <=> eq ne cmp |
Не сочетаются |
13 |
& |
Слева направо |
14 |
I л |
Слева направо |
15 |
&& |
Слева направо |
16 |
I I |
Слева направо |
17 |
. . ... |
Не сочетаются |
18 |
?; |
Справа налево |
19 |
= **= += -= .= *= /= %= х= &= |= л = |
Справа налево |
«= »= &&=|| = |
|
|
20 |
, => |
Слева направо |
21 |
Правосторонние списковые операции |
Не сочетаются |
22 |
not |
Справа налево |
23 |
and |
Слева направо |
24 |
or xor |
Слева направо |