Выбрать главу

($n < 0) ? 0 : --$n

$temperature < 20 ? 'холодно' : 'тепло'

Перечень операций в языке Perl не ограничивается рассмотренными в этой лекции. По мере изучения других разделов будут описаны другие, более специализированные операции. Например, нам наверняка понадобится операция чтения строки из стандартного входного потока (обычно связанного с системной консолью). Она обозначается символами <> и по- английски называется diamond, что на русский лучше всего перевести как "кристалл" (хотя встречается русское название "ромб"). Эта операция считывает очередную строку и возвращает ее значение:

$line = <> # считать в $line строку из стандартного ввода

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

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

$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 операции над списками (слева направо)
Справа 3 not (логическое НЕ)
Слева 2 and (логическое И)
Слева 1 or xor (логическое ИЛИ, логическое исключающее ИЛИ)

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