Язык программирования Perl - [14]
Очередность выполнения операций в выражении определяется их приоритетами и ассоциативностью, но она может быть изменена с помощью скобок. Приоритет определяет порядок вычисления операций в выражении: операции с более высоким приоритетом вычисляются раньше. Например, приоритет у операций умножения и деления выше, чем у сложения и вычитания. Ассоциативность определяет порядок вычислений, если в выражении используются операции с одинаковыми приоритетами. Операции с ассоциативностью слева вычисляются обычным образом, слева направо. Но из двух операций, имеющих ассоциативность справа, первой вычисляется стоящая справа. Например:
>$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 имеется большое количество операций, в том числе и весьма экзотических. Поэтому, если возникает сомнение в порядке их вычислений, то всегда можно использовать скобки для управления очередностью вычислений в выражении.
Понимание изложенного в этой лекции материала о скалярных операциях совершенно необходимо для разработки программ на Perl, хотя запоминать все приведенные здесь операции совершенно излишне. Операции и выражения являются основой для освоения материала о синтаксических правилах языка Perl, о которых пойдет речь в следующей лекции.
Лекция 4. Управляющие структуры
В этой лекции описываются основы синтаксиса языка Perl, ключевые слова и правила составления Perl-программы. В ней рассмотрено все многообразие управляющих структур, как традиционных, так и специфичных только для этого языка программирования. Стиль программирования на Perl подразумевает свободу выражения идей программиста, и различные синтаксические варианты максимально способствуют этому.
Цель лекции: познакомиться с синтаксическими правилами составления программ на языке Perl, которые сначала могут показаться непростыми, но обладают исключительной гибкостью и мощью, предоставляют полный контроль над ходом выполнения программы и учитывают разнообразие стилей при разработке программ.
Минимальная синтаксическая единица языка программирования называется термом. Терм (term) - это все то, что может служить операндом в выражении, например, литерал или переменная. Выражение напоминает неоконченную фразу в естественном языке. Чтобы выражение стало законченным предложением (statement, называемым также утверждением), нужно после него поставить символ ";" (точка с запятой). Другими словами, простое предложение - это выражение, вычисляемое ради его побочного эффекта. Кроме предложений, в программе на Perl могут присутствовать объявления переменных и подпрограмм, которые будут рассмотрены позднее. Приведем примеры простых предложений:
>$count = 0; # присваивание значения переменной
>$count++; # изменение значения операнда
>$result = 'Итого=' . $count . "\n"; # подготовка к печати
>1; # литерал - минимальное, но корректное предложение
Последнее предложение, кажущееся бессмысленным, применяется в последней строке модулей для возврата "истинного" значения при успешной загрузке модуля. О модулях будет подробно рассказано в лекции 13.
Программа на Perl пишется в свободном формате. Это означает, что ее можно записывать сплошным текстом, вставляя для удобочитаемости между термами и знаками операций любое количество пробельных символов (whitespace) таких как пробел, символ табуляции или перевод строки. По желанию автора можно прервать выражение до или после терма и продолжить его на следующей строке. Можно, конечно, вообще не применять пробельных символов и записывать программу в таком виде: