Разные операции В этом параграфе собраны операции,
которые не вошли ни в одну из рассмотренных нами групп операций. Две из них
упоминались при описании массивов и хешей (операции диапазон и запятая), а третья
является единственной тернарной операцией языка Perl (операция выбора). Операция диапазон Бинарная операция диапазон
".." по существу представляет две различных операции в зависимости
от контекста, в котором она используется. В списковом контексте,
если ее операндами являются числа (числовые литералы, переменные или выражения,
возвращающие числовые значения), она возвращает список, состоящий из последовательности
увеличивающихся на единицу целых чисел, начинающихся со значения, определяемого
левым операндом, и не превосходящих числовое значение, представленное правым
операндом. Операцию диапазон часто используют для задания значений элементов
массивов и хешей, а также их фрагментов (см. главу 3). Она удобна для
организации циклов for и f oreach:
# Напечатает строку "12345". Если левый операнд больше правого
операнда, то операция диапазон возвращает пустой список. Подобную ситуацию можно
отследить с помощью функции defined О, возвращающей истину, если ее параметр
определен, или простой проверкой логической истинности массива, элементам которого
присваивались значения с помощью операции диапазон: (-5..5) # Список чисел: (-2, -1,
О, 1, 2). (-5..-10) # Пустой список. В скалярном контексте
операция диапазон возвращает булево значение Истина или Ложь. Она работает как
переключатель и эмулирует операцию запятая "," пакетного редактора
sed и фильтра awk системы Unix, представляющую диапазон обрабатываемых строк
этими программами.
Сделаем замечания относительно
работы программы примера 4..12. На первом шаге цикла левый операнд операции
диапазон истинен, следовательно сама операция находится в состоянии Истина и
возвращает первое порядковое число (i). Но правый операнд становится также истинным
($right = 2), следовательно она переходит в состояние Ложь и к возвращаемому
ей значению добавляется строка "ЕО". На втором шаге цикла левый операнд
истинен ($ieft = 2) и операция переходит в состояние Истина, возвращая значение
д, к которому опять добавляется строка "ЕО", так как истинный правый
операнд ($ right = 1) переводит операцию в состояние Ложь.
Еще одно достаточно полезное свойство
операции диапазон в скалярном контексте, используемое при обработке строк файлов,
заключается в том, что если какой-либо операнд этой операции задан в виде числового
литерала, то он сравнивается с номером прочитанной строки файла, хранящейся
в специальной переменной $., возвращая булево значение Истина при совпадении
и Ложь в противном случае. В программе примера 4.15 иллюстрируется такое использование
операции диапазон. В ней осуществляется пропуск первых не пустых строк файла,
печатается первая строка после пустой строки и после этого завершается цикл
обработки файла. } close(POST); Бинарная операция запятая ","
ведет себя по-разному в скалярном и списковом контексте.
В списковом контексте она является всего лишь разделителем между элементами
списка: Для операции запятая в языке Perl
существует удобный синоним — операция =>, которая полностью идентична операции
запятая и удобна при задании каких-либо величин, которые появляются парами,
например, ключ/значение в ассоциированных массивах. Правда, эта операция обладает
еще одним свойством, достаточно удобным для ее использования при задании ассоциированных
массивов: любой идентификатор, используемый в качестве ее левого операнда, интерпретируется
как строка. Единственная тернарная операция
выбора
операнд! ? операнд2 : операндЗ Поделитесь этой записью или добавьте в закладки | Полезные публикации |