Очередность выполнения операций в выражении определяется их приоритетами и ассоциативностью, но она может быть изменена с помощью скобок. Приоритет определяет порядок вычисления операций в выражении: операции с более высоким приоритетом вычисляются раньше. Например, приоритет у операций умножения и деления выше, чем у сложения и вычитания. Ассоциативность определяет порядок вычислений, если в выражении используются операции с одинаковыми приоритетами. Операции с ассоциативностью слева вычисляются обычным образом, слева направо. Но из двух операций, имеющих ассоциативность справа, первой вычисляется стоящая справа. Например:
$a ** $b ** $c # ассоциативность справа, т.е. $a**($b**$c)
$a * $b / $c # ассоциативность слева, т.е. ($a * $b) / $c
$a && $b && $c # ассоциативность слева, т.е. ($a && $b) && $c
$a = $b = $c # ассоциативность справа, т.е. $a = ($b = $c)
$a | $b ^ $c # ассоциативность слева, т.е. ($a | $b) ^ $c
В таблице 3.2 приводится полный список операций, перечисленных в порядке убывания приоритетов, с указанием их ассоциативности. В этой таблице даны все операции языка Perl, в том числе и не рассмотренные в этой лекции. Многие из них будут изучены в следующих лекциях.
Ассоциативность | Приоритет | Операция |
---|---|---|
Слева | 24 | термы и операции над списками (справа налево) |
Слева | 24 | -> (вызов метода, разыменование) |
Не ассоциативные | 22 | ++ -- (автоинкремент, автодекремент) |
Справа | 21 | ** (возведение в степень) |
Справа | 20 | ! ~ \ + - (логическое НЕ, побитовое отрицание, операция ссылки, унарный плюс, унарный минус) |
Слева | 19 | =~ !~ (привязка к шаблону: совпадение, несовпадение) |
Слева | 18 | * / % х (умножение, деление, деление по модулю, повторение строки) |
Слева | 17 | + - . (сложение, вычитание, конкатенация строк) |
Слева | 16 | << >> (побитовый сдвиг влево или вправо) |
Не ассоциативные | 15 | именованные унарные операции и операции над файлами |
Не ассоциативные | 14 | < > |
Не ассоциативные | 13 | == != <=> eq ne cmp (равно, не равно, сравнение и их строковые эквиваленты) |
Слева | 12 | & (побитовое И) |
Слева | 11 | | ^ (побитовое ИЛИ, побитовое исключающее ИЛИ) |
Слева | 10 | && (логическое И) |
Слева | 9 | || (логическое ИЛИ) |
Не ассоциативные | 8 | .. ... (не включающие или включающие граничные значения диапазоны) |
Справа | 7 | ?: (операция выбора или условная операция) |
Справа | 6 | = += -= *= и т. д. (присваивание и присваивание с вычислением) |
Слева | 5 | , => (запятая и запятая-стрелка) |
Не ассоциативные | 4 | операции над списками (слева направо) |
Справа | 3 | not (логическое НЕ) |
Слева | 2 | and (логическое И) |
Слева | 1 | or xor (логическое ИЛИ, логическое исключающее ИЛИ) |
В Perl имеется большое количество операций, в том числе и весьма экзотических. Поэтому, если возникает сомнение в порядке их вычислений, то всегда можно использовать скобки для управления очередностью вычислений в выражении.
Понимание изложенного в этой лекции материала о скалярных операциях совершенно необходимо для разработки программ на Perl, хотя запоминать все приведенные здесь операции совершенно излишне. Операции и выражения являются основой для освоения материала о синтаксических правилах языка Perl, о которых пойдет речь в следующей лекции.
Лекция 4. Управляющие структуры
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии