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

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

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

Лекция 4. Управляющие структуры

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

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


Минимальная синтаксическая единица языка программирования называется термом. Терм (term) - это все то, что может служить операндом в выражении, например, литерал или переменная. Выражение напоминает неоконченную фразу в естественном языке. Чтобы выражение стало законченным предложением (statement, называемым также утверждением), нужно после него поставить символ ";" (точка с запятой). Другими словами, простое предложение - это выражение, вычисляемое ради его побочного эффекта. Кроме предложений, в программе на Perl могут присутствовать объявления переменных и подпрограмм, которые будут рассмотрены позднее. Приведем примеры простых предложений:


>$count = 0; # присваивание значения переменной

>$count++; # изменение значения операнда

>$result = 'Итого=' . $count . "\n"; # подготовка к печати

>1; # литерал - минимальное, но корректное предложение


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

Программа на Perl пишется в свободном формате. Это означает, что ее можно записывать сплошным текстом, вставляя для удобочитаемости между термами и знаками операций любое количество пробельных символов (whitespace) таких как пробел, символ табуляции или перевод строки. По желанию автора можно прервать выражение до или после терма и продолжить его на следующей строке. Можно, конечно, вообще не применять пробельных символов и записывать программу в таком виде: