Некоторые специальные переменные доступны только для чтения, значения же других могут изменяться по усмотрению программиста. Поскольку нелегко запомнить назначение специальных переменных по их "очень специальным" именам, существует указание компилятору (use English), которое позволяет обращаться к ним по более понятным длинным именам, например:
$ARG вместо $_ $INPUT_LINE_NUMBER вместо $. $INPUT_RECORD_SEPARATOR,$RS вместо $/ $PERL_VERSION вместо $] $PROGRAM_NAME вместо $0 $EVAL_ERROR вместо [email protected] $OS_ERROR, $ERRNO вместо $! $EXTENDED_OS_ERROR вместо $^E $BASETIME вместо $^T
Полный список специальных переменных с их именами, а также советы по их использованию с отличными примерами всегда можно узнать из документации, вызвав справку утилитой
perldoc perlvar
О специальной переменной $_ следует поговорить особо. По своему назначению она выполняет роль местоимения "это" или "этот" (английские it или this). Ее употребляют, чтобы обратиться к обрабатываемому в текущий момент значению или порции данных. Эту переменную еще называют "переменной по умолчанию" или "буферной переменной", и многие встроенные функции в Perl-программе работают именно с этой переменной, если явно не указан другой аргумент. Например, при чтении из файла в нее может помещаться введенная строка, а функция print без параметров печатает значение переменной по умолчанию $_.
Большинство специальных переменных являются глобальными, и программисту нужно быть очень осторожным при изменении их значений, так как в других частях программы и в подключаемых модулях может предполагаться их стандартное значение. Чтобы избежать нежелательной модификации таких переменных, нужно в каждой подпрограмме или блоке перед их изменением явно объявить их с помощью описателя local:
local $save_value = $_;
Тогда при выходе из блока будет восстановлено предыдущее значение специальной переменной.
В языке Perl, как и в языке командных интерпретаторов Unix, комментарий начинается с символа # и продолжается до конца строки:
$lecture_number = 2; # комментарий, занявший часть строки # А это комментарий, занимающий всю строку
В первой строке программы на Perl можно увидеть особый комментарий: он начинается с символов #! (называемых shebang, от названия символов - sharp и bang), и в нем указывается путь к исполняющей системе perl (полный путь от корня файловой системы). В операционных системах семейства Unix эта строчка помогает сделать программу на Perl исполняемой (если установить для файла программы флаг, "исполняемый" командой chmod +x program.pl). В операционной среде Windows такой комментарий требуется использовать в CGI-программах для web-сервера Apache. Этот комментарий также удобен тем, что в нем можно указывать параметры для исполняющей системы Рerl: например, флаг -w для вывода дополнительных предупреждений компилятора:
#!C:usrlocalperlbinperl -w
В Perl нет многострочных комментариев, подобных /* … */ в языке C или Java. (Хотя эту возможность можно добавить, если подключить модуль Acme::Comment, доступный в хранилище модулей CPAN.) Но если требуются комментарии из нескольких строк, то можно воспользоваться командами системы документирования Perl, называемой POD (от английского "Plain Old Documentation" - "старая добрая документация"). Такой многострочный комментарий можно записать в виде
=pod Знак = должен располагаться в самом начале строки. Текст этого комментария фактически является документацией в формате POD, встроенной в текст программы. Конец комментария (=cut) также должен быть в начале строки. =cut
POD представляет из себя систему разметки текста, в том числе программной документации, который можно просматривать, печатать или конвертировать в другой текстовый формат, например, в HTML. Документация может храниться в текстовых файлах, обычно с суффиксом pod. Но благодаря тому, что компилятор perl игнорирует текст, окруженный командами POD, документацию можно встраивать в нужные места исходного текста программы. Вот наиболее часто используемые команды POD для оформления документации на программу, которые встречаются при чтении исходных текстов на Perl:
=pod Начало документации (использовать не обязательно). =headN текст заголовка Заголовок N-го уровня. Уровень N может быть от 1 до 4. =over N Абзац с отступом в N знаков, например, начало списка. =item заглавие элемента Начало элемента списка. =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