Составные операторы Составные операторы — это
второй тип операторов языка Perl. С их помощью реализуют ветвления в программе
и организуют циклические вычисления. Эти операторы, в отличие от аналогичных
операторов других языков программирования, определяются в терминах блоков —
специальном понятии языка Perl, задающим область видимости переменных. Именно
с блоков мы и начнем изучение составных операторов. Блоки Блок — последовательность
операторов, определяющая область видимости переменных. В программе блок обычно
ограничен фигурными скобками {...}. Определяя синтаксис составных операторов,
мы будем иметь в виду именно такой блок — последовательность операторов в фигурных
скобках и обозначать его БЛОК. Интерпретатор рассматривает БЛОК как один оператор,
вычисляемым значением которого является значение последнего выполненного оператора
блока. Это означает, что там, где можно использовать один оператор, можно использовать
и БЛОК. Такая ситуация встречается при использовании функции тар(). Она выполняет
определяемый ее первым параметром оператор для всех элементов списка, заданного
вторым параметром. Значение каждого элемента списка при вычислениях временно
присваивается встроенной переменной $_. Возвращает эта функция список вычисленных
значений оператора: @rez = map $_ **= 2, @array; #
Список квадратов элементов массива. Как сказано в начале этого раздела,
блок определяет область видимости переменных. Это означает, что в блоке
можно создать переменные, обращаться к которым можно только из операторов, расположенных
в этом блоке. Пока мы в блоке, мы можем присваивать им новые значения, использовать
в вычислениях и т. п., но как только мы вышли из блока, мы теряем с ними "связь",
они становятся "не видимыми". Такие переменные еще называют локальными
переменными. Локальные переменные удобны для
создания временных переменных, которые нигде больше не будут использоваться
в программе, а только в одном определенном месте. Например, при отладке части
кода часто приходится создавать временные переменные и выводить на печать их
значения. Локальные переменные могут иметь такие же имена, как и глобально используемые
переменные. Это не приводит к конфликту. После завершения операторов блока значение
глобальной переменной имеет то же значение, которое она имела до начала выполнения
операторов блока (пример 5.4).
$var = "outer"; # Глобальная переменная $var $glob = "glob";
# Глобальная переменная $glob my $lex = "outer_l"; # Лексическая переменная
$1ех { Операторы программы Perl выполняются последовательно в порядке их расположения в программе. Для реализации простых алгоритмов этого вполне достаточно. Однако большинство реальных алгоритмов не укладываются в такую линейную схему. Практически всегда при реализации любого алгоритма возникают ситуации, когда одну группу операторов надо выполнить только при выполнении определенных условиях, тогда как другую группу при этих же условиях вообще не следует выполнять. В языке Perl для организации подобного ветвления в программе предусмотрены операторы if, которые мы и будем называть операторами ветвления.
Эти операторы вычисляют выражение, называемое условием, и в зависимости от его
истинности или ложности выполняют или не выполняют некоторый блок операторов.
Это означает, что выражения условия во всех операторах ветвления вычисляются
в булевом контексте. В операторе if со множественными
проверками может быть сколько угодно блоков
elsif, но только один блок else. При работе с операторами ветвления важно помнить, что только один блок операторов будет выполнен — тот, для которого истинно соответствующее выражение условия. Во всех операторах ветвления ключевое
слово if может быть заменено на unless. В этом случае проверка выражения условия
осуществляется на его ложность. Последний оператор if можно записать и так:
Поделитесь этой записью или добавьте в закладки | Полезные публикации |