Читаем Язык программирования Perl полностью

package Module; # пространство имен модуля use 5.006001; # использовать версию Perl не ниже указанной use strict; # включить дополнительные проверки use warnings; # и расширенную диагностику our $VERSION = '1.00'; # версия модуля require Exporter; # загрузить стандартный модуль Exporter our @ISA = qw(Exporter); # неизвестные имена искать в нем our @EXPORT = qw( subroutine ); # имена, экспортируемые по умолчанию our @EXPORT_OK = qw( $variable ); # имена, экспортируемые по запросу $Module::variable = 'переменная 1'; # скаляр из модуля Module sub subroutine { # подпрограмма из модуля Module return "'подпрограмма 1 $Module::variable'"; } 1; __END__

Автоматически сгенерировать скелет нового модуля (а также сопутствующие файлы, необходимые для подготовки модуля к распространению) можно с помощью утилиты h2xs, входящей в состав дистрибутива Perl. Например, создать модуль с именем 'Module::Name' версии 1.00 можно такой командой:

h2xs -AX -n Module::Name -v 1.00

Если программа, которая обращается к этому модулю, использует только экспортированные по умолчанию имена, то используется форма команды use только с именем модуля:

use Module; # подключить модуль и # импортировать из него имена по умолчанию subroutine(); # вызвать подпрограмму &Module::subroutine()

В программе, в которой нужно явно затребовать перечисленные имена (с помощью метода import), применяется форма команды use со списком импортируемых имен:

use Module qw($variable); # затребовать импорт нужных имен print "$variable\n"; # скаляр $Module::variable

Антонимом команды use является команда no, которая неявно выполняет вызов метода unimport для отмены импортированных имен. В команде use также можно проверить, что версия подключаемого модуля соответствует требованиям. Для этого после имени модуля указывается минимальная требуемая версия:

use Module 1.00; # подключить модуль не ниже указанной версии

Помимо процедурного, модули могут иметь объектно-ориентированный интерфейс, который будет рассмотрен в следующей лекции.

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

Блок BEGIN выполняется как можно раньше: во время компиляции сразу после того, как он полностью определен. Если определено несколько блоков BEGIN, то они выполняются в порядке их описания. Они используются командой use для загрузки внешних файлов во время компиляции программы.

Блок END выполняется как можно позже: после того как perl закончил выполнение программы, перед завершением работы интерпретатора. Он выполняется даже в случае аварийного завершения программы. Несколько блоков END выполняются в порядке, обратном их размещению в файле. Блоки END не выполняются, если при запуске Рerl заказана только компиляция (опцией -c), или если компиляция завершается аварийно. При работе END доступна специальная переменная $?, содержащая код завершения программы, который можно изменить.

Блок CHECK выполняется после того, как Рerl закончил компиляцию программы. Можно определить несколько блоков CHECK, тогда они будут выполняться в порядке, обратном их описанию. Блоки CHECK выполняются, если Рerl запущен с опцией -c только для компиляции программы.

Блок INIT выполняется перед тем, как интерпретатор начнет выполнение программы, поэтому могут использоваться для инициализации модулей. Несколько блоков INIT выполняются в порядке их описания. Поясним последовательность выполнения специальных блоков на коротком примере:

Перейти на страницу:

Похожие книги