Поиск
Другие операторы
В Perl существует такое огромное количество операторов, что в этой книге просто не хватит места, чтобы их все подробно описать. Оставшаяся часть этого занятия посвящена часто используемым операторам и функциям Perl.
Унарные операторы
До сих пор все встречавшиеся вам операторы имели по два аргумента. Для деления 6/3 нужен числитель б и знаменатель 3, для умножения 5*2 нужны множители 5 и 2 и т.д. Другой тип операторов — операторы с одним аргументом (операндом). Скорее всего, вы уже знакомы с одним представителем операторов такого рода — унарным минусом (-). Унарный минус изменяет знак своего аргумента, например:
6; | Шесть
-6 | Минус шесть
-(-5) | Пять, минус на минус дает плюс.
В отличие от унарного минуса, большинству операторов Perl назначены имена. Операнды именованных унарных операторов заключать в скобки необязательно (в табл. 2.4 они приведены лишь для удобства). Поскольку именованные операторы в Perl напоминают функции, то их операнды иногда называют аргументами, т.е. термином, принятым для параметров функций Perl.
Краткий список именованных операторов приведен в табл. 2.4.

Полный список именованных операторов приведен в документации по Perl. На 1-м занятии, "Начало работы с Perl", рассказывалось о том, как получить доступ к разделам документации с помощью утилиты perldoc, которая входит в поставку Perl. Полный список операторов находится на страницах руководства perlop и perlfunc. На последующих занятиях, по мере необходимости, будут представлены и некоторые другие операторы.
Инкремент и декремент
В разделе "Числовые операторы" мы уже говорили о специальном типе операторов присваивания, называемом инкрементом, выглядевшем тогда так:
$counter=$counter+l;
Инкремент обычно используется для подсчета чего-либо, например количества встретившихся записей или для генерации последовательных номеров (например, нумерации элементов списка). Вы можете в этих целях использовать специальный оператор, называемый оператором автоинкремента (++). Этот оператор прибавляет к операнду единицу:
$counter++;
После выполнения этой строки кода значение переменной $counter увеличивается на единицу.
В Perl есть оператор для уменьшения значения переменной, который, как вы уже могли сами догадаться, называется оператором автодекремента (--). Автодекремент используется точно так же, как и автоинкремент:
$countdown=10;
$countdown-—; | Значение переменной становится равным 9
Перед тем как завершить описание этих операторов, следует упомянуть еше об одном любопытном свойстве автоинкремента. Речь идет о применении этого оператора к строке алфавитно-цифровых символов, что приводит к очень интересному результату! Данная операция влияет на последний (самый правый) символ строки — его значение увеличивается на 1, при этом буквенный символ заменяется следующим символом алфавита. Ниже приведены примеры действия оператора автоинкремента на строки.
$а="999";
$а++;
print $a; | как и следовало ожидать, напечатает 1000.
$а="с9";
$а++;
print $а; | напечатает dO. 9+1=10, с заменяется следующим символом алфавита d.
$a="zzz";
$а++;
print $a; | напечатает аааа.
Угловой оператор
Угловой оператор (о), иногда из-за своей формы называемый "бубновым", прежде всего, используется для чтения и записи файлов (подробнее об этом речь пойдет на 5-м занятии, "Работа с файлами"). Однако, чтобы сделать примеры более интересными, мы начнем его использовать раньше, и к 5-му занятию он уже будет нам хорошо знаком.
А пока мы будем использовать простейшую форму углового оператора: <STDIN>. Эта конструкция сообщает Perl, что строка должна быть считана со стандартного устройства ввода — обычно с клавиатуры. Таким образом, оператор <STDIN> возвращает строку, введенную с клавиатуры, например:
print "Какой у вас размер обуви? ";
$size=<STDIN>;
print "Ваш размер обуви ~ ${size}Спасибо за внимание";
После выполнения этого кода (предположим, что в качестве размера обуви вы указали число 45) на экран будет выведено следующее:
Какой у вас размер обуви? 45
Ваш размер обуви — 45 Спасибо за внимание
Оператор <STDIN> читает вводимые с клавиатуры символы до тех пор, пока пользователь не нажмет клавишу <Enter>. Затем введенная строка помещается в переменную Ssize. Строка текста, возвращаемая оператором <STDIN>, содержит символ перевода строки, введенный пользователем при нажатии клавиши <Enter>. Обычно не желательно, чтобы в конце введенной строки находился символ перевода строки, т.е. требуемая строка должна содержать лишь текст. Для удаления символа перевода строки можно воспользоваться оператором chomp:
print 'Какой у вас размер обуви? ";
$size=<STDIN>;
chomp $size;
print "Ваш размер обуви — $size. Спасибо за вниманиеn";
Оператор chomp удаляет в строке-аргументе завершающий символ перевода строки. Он также возвращает количество удаленных символов — обычно это 1, но иногда О, если ничего не удалено.
Другие операторы присваивания
Вы уже знаете, что для присваивания значений скалярным переменным используется оператор присваивания =. В Perl имеется еще целый набор операторов присваивания. Каждый арифметический оператор Perl и еще некоторые другие могут быть использованы одновременно и для выполнения соответствующей операции, и для последующего присваивания. Ниже приведено общее правило образования таких операторов присваивания:
переменная оператора выражение
Эта строка равносильна следующей: переменная= переменная оператор выражение
Использование подобных операторов обычно не сделает вашу программу более читабельной, но сделает ее короче. Согласно вышеописанному правилу, оператор
$а=$а+3;
можно сократить до
$а+=3; . .
А вот еще несколько примеров:
$line.=" - это конец строки"; | Фраза дописывается к $line;
$у*=$х | To же, что и $у=$у*$х
$r%=67 | Остаток от деления $r на 67 помещается в $r
Несколько слов о строках и числах
Perl позволяет использовать в выражениях как строки, так и числа. При этом, в зависимости от ситуации, Perl выполняет автоматическое преобразование чисел в строковое представление и наоборот. Ниже приведено несколько правил, которыми руководствуется программа-интерпретатор.
- Если из строки можно без проблем вьщелить число, Perl использует число, например:
$а=42; | Число
print $a+18; | Печатает 60
$Ь="50"; | Строка
print $b-10; | Печатает 40 - Если число используется в строковом выражении, Perl преобразовывает число в строку, например: . .
$а=42/3; | Число
$а=$а, "Hello"; | Используется число как строка
Print $a; | Печатает "14Hello" - Если в выражении строка используется там, где должно быть число, Perl использует число 0, например:
$a="Hello, World!";
print $a+6; | Печатает число 6
Однако, если включен режим вывода предупреждений, в последнем случае Perl выдаст соответствующее сообщение.
Все эти примеры иллюстрируют философию, свойственную Perl, — философию "минимальной неожиданности". Даже получив абсурдные аргументы, как в предыдущем примере, Perl пытается сделать с ними нечто осмысленное. Если вы включили режим вывода предупреждений, указав ключ -v в первой строке вашей программы или в командной строке, Perl предупредит вас, что совершает бессмысленное действие, следующим сообщением: Argument X isn't numeric.