Подпрограммы
Подпрограммы могут находиться
как в текущем файле (модуле), так и во внешнем. Перед тем, как вызвать
подпрограмму, её можно задекларировать в основной программе. Это делается
так:
-
sub
NAME; - декларация только имени подпрограммы
-
sub
NAME BLOCK; - декларация с определением
-
sub
BLOCK; - анонимная декларация
Вызываются подпрограммы следующим образом::
&
NAME (
LIST
) ,
где NAME - имя вызываемой подпрограммы;
LIST
- список назначенных параметров для этой подпрограммы, который
обрабатывается как массив
@_. Префиск
&
и круглые скобки можно не использовать, но тогда декларация обязательна.
Вызов подпрограмм из других модулей выглядет так:
use
модуль
qw(NAME1, NAME2, NAME3).
Использовать переменные внутри одной подпрограммы или модуля
можно двумя способами. Частный или приватный представляет собой декларирование
переменных посредством функции
my()
. Второй способ является локальным и применяется только для переменных форматов
(в циклах использовать не рекомендуется). Декларируются такие переменные
с помощью функции
local().
В языке
Perl
для укороченного описания типов параметров,
которые указываются подпрограмме, предусмотрены сокращения. Выглядет
это следующим образом - предварительно декларируется (
sub
my
_функция (символы-сокращения)), а затем, в нужном месте,
непосредственно сам вызов. К символам-сокращениям в данных описаниях
относятся:
-
\
- обозначает, что бдет применяться параметр с типом 'символ'
-
$
- описание, как скаляра
-
@
или
%
- оставшиеся параметры будут обрабатываться как список
-
;
- разделят обязательные и не обязательные параметры между собой
- * - тип описания имен (например:
handle,
writehandle и т. д.)
-
&
- анонимная подпрограмма
Приведем пример:
sub mygrep(&@) # декларация
mygrep { /good/ } $var1, $var2, $var3 # вызов
В языке
Perl
можно не только передавать подпрограмме значения
элементов массива, но и делать ссылку на него. Причем в этом случае,
подпрограмма может менять значения указанного массива. Ссылка делается
путем добавления символа "*" (звездочка) к имени переменной и действует
для всех элементов массива, кроме скалярных. Изменять скаляры можно,
например, с помощью переменной
$_[ ].
Модули (пакеты)
Модуль
- это несколько подпрограмм и переменных, находящихся
в одном файле. В одном модуле может находиться другой (по аналогии
табличного принципа в построении web-страницы). Начало модуля указывается
в коде програвммы так:
packages
имя_модуля, а концом модуля будет являться конец блока или файла.
Имя для основного модуля по умолчанию устанавливается
main
. Кроме того это имя в пределах модуля можно не указывать, а просто
ссылаться на него с помощи установки вместо
main
двух двоеточий (
::
).
Текущий пакет поддерживает хранение имен переменных
только тех, которые начинаются с буквы или "
_
". Остальные
переменные будут находиться в пакете
main
. Кроме них там же хранятся и имена
STDIN, STDOUT, STDERR, ARGV, ARGVOUT,
ENV, INC и
SIG
.
В модуле предусмотрены выполнение двух специальных подпрограмм
с именами
BEDIN
- конструктор создания объекта и
END
- деструктор (удаление объекта). Конструктор
обрабатывается компилятором сразу (до окончания полного сканирования
подпрограммы), как будет обнаружен. Деструктор будет выполнен при
окончании работы интерпритатора.
Если говорить о классах, то в языке
Perl модули могут
быть реализованы классами и вэтом случае подпрограммы модуля будут
являться методами. Массив
@ISA
использует принцип построения наследования в классах.
Форматы
Язык
Perl имеет встроенные возможности по созданию форматированного
абзаца. Сначала для этого применяется оператор
format
, который содержит
рамеры отступов, нужное положения и рамеры текстовой информации,
а затем, посредством функции
write
файл
, всё в нужном виде переходит в назначенный
файл.
Оператор
format в программах применяется в следующем виде:
format имя =
FORMLIST
(строки формата)
где имя - имя формата (при отсутствии действует значение
STDOUT
).
FORMLIST
может быть комментарием с обозначением "
#
", указателем форматирования полей со строками числовых аргументов,
либо без них. Для обозначения последнего применяются следующие
символы:
-
>>>>
- применять значение, относительно левого края
-
<<<<
- применять значение, относительно правого края
-
IIII
- применять значение, относительно центра
-
####.###
- числа с точкой
- @* - вывод значений в столбик,
где колличество символов является размером.
Каждое новое поле начинается с символа "
@" или "
^
". При применении последнего назначаются специфические значения:
-
^####
- символы не выводятся, если переменная не найдена.
-
^<<<<<
- вывод в строку максимального колличество символов и перевод
остаточного колличества в значение переменной, которая интерпритирует
их в последующих строках, при условии наличия собственных полей.
При форматировании листов используются такие переменные,
как:
-
$^
- формат заголовка
-
$~
- формат для строк
-
$%
- номер листа
-
$=
- колличество строк в листе
Отладчик
Язык Perl в своем "арсенале" имеет виртуальный отладчик,
обращаясь к которому можно полностью протестировать программу
на наличие ошибок, а также просмотреть её "изнутри". Для вызова
отладчика нужно запустить программу с ключом "
-d
". При работе с отладчиком используются следующие команды:
Имя
|
Функция команды
|
h |
справка о командах |
s |
исполнение одной команды
с последующей остановкой |
n |
завершение работы по
окончанию обработки подпрограммы |
r |
что и предыдущая, но
в отношении текущей подпрограммы |
c |
выполнение отрезка программы
(до следующей точки остановки) |
c _номер |
выполнение до строки
с указанном
номером |
T |
просмотр стека программы |
l _номер |
вывод строки с указанным
номером
|
l |
вывод последующего экрана
строк |
w _строк |
вывод указанного в "
w"
экрана строк |
l _подпрограмма |
вывод для просмотра
кода соответствующей
подпрограммы |
l min+incr |
вывод
incr+1 строк от
строки
min |
l min - max |
вывод строк от min до max |
/шаблон/ |
поиск строки в коде
программы |
?шаблон? |
обратный поиск строки
в коде программы |
S |
получение имен для всех
подпрограмм |
L |
вывод отрезка строк
от места остановки до активов |
t |
тумблер трассировки |
b подпрограмма [условие] |
при назначенном
условии в начале указанной
подпрограмме произойдет остановка |
b строка [условие] |
назначение точки остановки
при определенном
условии |
d |
исключение точки остановки |
D |
исключение всех точек
остановки |
a _строка команда |
Назначение актива, т.е
выполнение
команды вместе
с указанной
строкой |
A |
убрать все активы |
< команда |
назначение
команды перед
каждой остановкой |
> команда |
назначение
команды после
каждой остановки |
! номер |
обработка только одной
строки с указанным
номером |
! -номер |
отработка одной команды
с предыдущей строки, указанной
номером |
команда |
выполнение обычной команды
Perl |
^D или q |
выход из программы |
H-n |
показать n-ое колличество
отработанных команд |
p выражение |
показать значение
выражения |
V модуль [имена] |
показать значение всех,
либо указанных
имен в этом
модуле |
X [имена] |
аналогичен предыдыдущему,
но относительно текущего модуля |
|