Опубликован: 17.08.2006 | Доступ: свободный | Студентов: 5312 / 680 | Оценка: 4.49 / 3.94 | Длительность: 20:58:00
ISBN: 978-5-9556-0078-9
Лекция 13:

Библиотеки, пакеты и модули

< Лекция 12 || Лекция 13: 12345 || Лекция 14 >

Специальные блоки

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

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

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

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

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

print         " 8.  выполнение 1\n";
END { print   "14. (1-й END)\n" }
INIT { print  " 5. (1-й INIT)\n" }
CHECK { print " 4.  (1-й CHECK)\n" }
print         " 9.  выполнение 2\n";
BEGIN { print " 1. (1-й BEGIN)\n" }
END { print   "13. (2-й END)\n" }
CHECK { print " 3.  (2-й CHECK)\n" }
INIT { print  " 6. (2-й INIT)\n" }
print         "10.  выполнение 3\n";
END { print   "12. (3-й END)\n" }
BEGIN { print " 2. (2-й BEGIN)\n" }
INIT { print  " 7. (3-й INIT)\n" }
print         "11.  выполнение 4\n";

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

Обычное выполнение:		Только компиляция (perl -c)
 1. (1-й BEGIN)		 1. (1-й BEGIN)
 2. (2-й BEGIN)		 2. (2-й BEGIN)
 3.  (2-й CHECK)		 3.  (2-й CHECK)
 4.  (1-й CHECK)		 4.  (1-й CHECK)
 5. (1-й INIT)
 6. (2-й INIT)
 7. (3-й INIT)
 8.  выполнение 1
 9.  выполнение 2
10.  выполнение 3
11.  выполнение 4
12. (3-й END)
13. (2-й END)
14. (1-й END)

Использование специальных блоков позволяет программисту гибко организовать контроль над программой на всех этапах ее жизненного цикла - от компиляции до завершения.

Стандартные библиотеки модулей

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

perldoc perlmodlib

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

use Cwd 'chdir';     # подключить стандартный модуль
chdir '/temp';       # вызвать Cwd::chdir()
CORE::chdir '/temp'; # вызвать встроенную функцию chdir

Стандартные модули подразделяются на несколько групп. Одна из них - это модули прагм (pragmatic modules), которые контролируют поведение компилятора и исполняющей системы Perl. В качестве примера таких модулей можно привести constant, lib, locale, strict, utf8, warnings и другие. Другая группа - стандартные модули (standard modules), поставляемые вместе с системой программирования Perl. Приведем примеры стандартных модулей: AutoLoader, CPAN, Cwd, Encode, Exporter, File::Find, Math::BigInt, Time::localtime, Win32 и многие другие.

Следующая группа - это модули расширения (extension modules), написанные на языке C и предназначенные для взаимодействия с операционной системой. Примерами модулей расширения могут служить Socket, Fcntl и POSIX.

< Лекция 12 || Лекция 13: 12345 || Лекция 14 >
Галина Башкирова
Галина Башкирова

Здравствуйте, недавно закончила курс по проф веб программиованию, мне прислали методические указания с примерами тем, однако темы там для специальности 

Системный администратор информационно-коммуникационных» систем.
Мне нужно самой найти тему? или делать по высланным темам

 

Константин Моренко
Константин Моренко
Марина Дайнеко
Марина Дайнеко
Россия, Moscow, Nope, 2008
Сергей Пантелеев
Сергей Пантелеев
Россия, Москва