Простые операторы

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

Простые операторы

Простой оператор представляет собой любое выражение, завершенное символом точка с запятой (;), причем точка с запятой обязательна. Она может отсутствовать только тогда, когда простой оператор является последним оператором в блоке — специальной синтаксической конструкции, представляющей последовательность операторов, заключенную в фигурные скобки, и определяющей область видимости переменных, а также входящей в конструкции составных операторов.
СОВЕТ Рекомендуется всегда завершать простой оператор точкой с запятой, даже если он является последним в блоке. Это позволит избежать синтаксических ошибок, если при последующих модификациях программы в конец блока придется добавить еще один или несколько операторов. В Perl есть две операции, do{ } и eval{ }, которые внешне похожи на составные операторы с блоками { }, Однако они являются термами, поэтому их использование в качестве последней операции в выражении простого оператора всегда требует обязательного завершающего символа точка с запятой (;).
Как уже отмечалось, основное назначение любого оператора, и в том числе простого, — изменение состояния программы. В основном под этим понимается изменение значений переменных программы, поэтому выражение в простом операторе должно вычисляться с побочным эффектом, который проявляется в изменении значения некоторых переменных в программе при вычислении выражения. Мы помним, что основное предназначение выражения — вычислить некоторую величину, а не изменить состояние программы. В большинстве языков программирования присваивание переменной какого-либо значения является оператором, но в Perl это операция, которую можно использовать в выражениях. Следовательно, в простом операторе выражение должно содержать хотя бы одну операцию присваивания. Ее вычисление и приводит к «побочному эффекту». В Perl есть еще две операции, приводящие к побочному эффекту, — это операции увеличения/уменьшения на единицу (++, --). Других операций, вызывающих побочный эффект, нет, если не считать изменения значения фактического параметра при обращении к подпрограмме. Приведем несколько простых операторов, выполнение которых приводит к побочным эффектам:
$m = $n**2; — простое присваивание
$g += $t;   — сложное присваивание
$n++;       — увеличение значения переменной $n на единицу
--$n**2;    — уменьшение значения переменной $n на единицу
Почему мы так настойчиво говорили о выражении с побочным эффектом? Дело в том, что простой оператор Perl может содержать выражение и без побочного эффекта. Все равно он будет рассматриваться интерпретатором как допустимый оператор, правда, не изменяющий состояния программы, а только вычисляющий значение некоторого выражения. Однако если включен режим отображения интерпретатором предупреждающих сообщений (установлен флаг -w при запуске интерпретатора или в сценарии используется прагма use warnings:), то будет получено сообщение о бесполезности использования соответствующей операции в void-контексте, что, согласитесь, в конечном счете справедливо. Например, при выполнении оператора
($n * $m) ** 4 + 6,
будет отображено сообщение:
Useless use of addition (+) in void context at ex05-01.pl line 4.
Обратите внимание, что в сообщении интерпретатора упоминается о последней выполненной операции в выражении простого оператора.
ПРИМЕЧАНИЕ Подобное сообщение будет отображаться, даже если в сложном выражении без операции присваивания присутствует операция увеличения/ уменьшения на единицу. Сообщение не отображается только в случае выражения, составленного из одних операций уменьшения/увеличения на единицу значений переменных, или выражения, в котором определена любая операция присваивания. Таким образом, разработчики Perl информируют программиста о том, что он, может быть, забыл вставить операцию присваивания в выражение.
Читатель спросит, какой прок в операторе, не выполняющем никакого действия. Его можно использовать для задания возвращаемого пользовательской функцией значения. Забегая вперед, скажем, что если в функции явно не задано обращение к функции return( ), определяющей возвращаемое значение, то по умолчанию Perl считает таковым значение последнего вычисленного в теле подпрограммы оператора. Именно это обстоятельство и используется многими программистами для задания возвращаемого значения:
sub mySub {
  …
  # последний оператор в теле подпрограммы
  $condition = $true ? "Result1" : "Result2";
}
Последний оператор функции mySub вычисляет операцию выбора, результат выполнения которой и является возвращаемым значением функции.

Следующая страница Содержание главы


Реклама