Язык программирования Perl

         

Приоритеты и ассоциативность операций


Очередность выполнения операций в выражении определяется их приоритетами и ассоциативностью, но она может быть изменена с помощью скобок. Приоритет определяет порядок вычисления операций в выражении: операции с более высоким приоритетом вычисляются раньше. Например, приоритет у операций умножения и деления выше, чем у сложения и вычитания. Ассоциативность определяет порядок вычислений, если в выражении используются операции с одинаковыми приоритетами. Операции с ассоциативностью слева вычисляются обычным образом, слева направо. Но из двух операций, имеющих ассоциативность справа, первой вычисляется стоящая справа. Например:

$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, в том числе и не рассмотренные в этой лекции. Многие из них будут изучены в следующих лекциях.

Таблица 3.2. Ассоциативность и приоритет операций (от высокого к низкому).

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

В Perl имеется большое количество операций, в том числе и весьма экзотических. Поэтому, если возникает сомнение в порядке их вычислений, то всегда можно использовать скобки для управления очередностью вычислений в выражении.

Понимание изложенного в этой лекции материала о скалярных операциях совершенно необходимо для разработки программ на Perl, хотя запоминать все приведенные здесь операции совершенно излишне. Операции и выражения являются основой для освоения материала о синтаксических правилах языка Perl, о которых пойдет речь в следующей лекции.


В Perl имеется большое количество операций, в том числе и весьма экзотических. Поэтому, если возникает сомнение в порядке их вычислений, то всегда можно использовать скобки для управления очередностью вычислений в выражении.

Понимание изложенного в этой лекции материала о скалярных операциях совершенно необходимо для разработки программ на Perl, хотя запоминать все приведенные здесь операции совершенно излишне. Операции и выражения являются основой для освоения материала о синтаксических правилах языка Perl, о которых пойдет речь в следующей лекции.

© 2003-2007 INTUIT.ru. Все права защищены.

Содержание раздела