Язык программирования Perl - [10]

Шрифт
Интервал

>Начало элемента списка.

>=back

>Окончание списка.

>=cut

>Окончание POD-документации, возврат к тексту программы.


Прочитать встроенную в программу POD-документацию в отформатированном виде можно с помощью поставляемой утилиты просмотра:


>perldoc program_with_pod


Описание в формате POD можно преобразовать в web-страницу поставляемой в комплекте с perl утилитой:


>pod2html --outfile=program.html program_with_pod


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


>perldoc perlpod


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

Лекция 3. Основные операции

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

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


Операции (также называемые операторами) в Perl многочисленны и разнообразны, с их помощью образуются арифметические, логические, строковые и другие выражения - конструкции, вычисляющие некоторый результат, хотя он не всегда может использоваться. Элементы выражения, над которыми производится операция, называются операндами. Результат операции в Perl может зависеть от контекста, в котором она выполняется. Но часто и сама операция устанавливает определенный контекст, влияющий на преобразование операндов. Конкретные правила вычисления выражений будут изложены при подробном рассказе о каждой из операций.

Конечно же, в Perl, как и в других языках программирования, есть традиционные арифметические операции:


>* умножение (например, 2 * 2 будет 4)

>/ деление (например, 11 / 2 будет 5.5)

>+ сложение (например, 111 + "999" будет 1110)

>- вычитание (например, '26' - 1 будет 25)


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


>' +.25x7' + 1 будет 1.25 (то есть ' +0.25' + 1 или 0.25 + 1)

>'x.25+7' + 1 будет 1 (то есть '' + 1 или 0 + 1)

>'10_000' + 1 будет 11 (то есть '10' + 1 или 10 + 1)


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


>** возведение в степень (например, 2 ** 5 будет 32)

>% деление по модулю или остаток от деления (например, 11 % 3 будет 2)


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


>++ автоинкремент или увеличение на 1 (например, $n++ или ++$n)

>-- автодекремент или уменьшение на 1 (например, $n-- или --$n)


В префиксной форме значением выражения будет значение операнда после изменения, а в постфиксной - значение операнда до изменения. Особенности применения префиксной и постфиксной форм можно показать на таком простом примере:


>$n = 25; # начальное значение переменной $n

>$x1 = $n++; # в $x1 сохранено 25, затем в $n стало 26

>$x2 = ++$n; # в $n стало 27 и оно сохранено в $x2

>$x3 = --$n; # в $n стало 26 и оно сохранено в $x3

>$x4 = $n--; # в $x4 сохранено 26, затем в $n стало 25

>--$n; # и наконец $n уменьшилось до 24


Хотя выражение с операцией автоинкремента или автодекремента возвращает значение, часто оно отбрасывается, а сама операция применяется только для изменения значения переменной, что является побочным эффектом ее выполнения. Например:


>++$done_count; # увеличиваем счетчик обработанных строк

>$left_count--; # уменьшаем счетчик оставшихся строк


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


>$f = 2.5; # начальное значение переменной $f

>$f++; # теперь в $f стало 3.5


Операции автоинкремента и автодекремента более естественны, чем используемые в других языках эквивалентные выражения наподобие $n = $n + 1 (которые так шокируют математиков). К тому же они обычно и более эффективно реализованы.