» язык
perl
» Главная
страница
» Вернуться
к содержанию ( Perl )
Модули
(packages)
В
Perl реализован механизм модулей.
Модуль это группа подпрограмм
и переменных обычно включенных
в один файл. Внутри одного модуля
можно определить другой модуль.
Начало модуля определяется директивой:
packages
имя_модуля;
Конец
модуля это конец блока или файла.
Головной модуль имеет по умолчанию
имя main. На имя внутри модуля
можно ссылаться, добавляя “::”
после имени модуля.
Например:
$main::var1
- переменная в головном модуле.
::var1
- то же самое. Имя main можно
опускать.
$модуль1::var1
- переменная в модуле 'модуль1'
$модуль1::модуль2::var1
— Модуль2 содержится в модуле
1.
Только
идентификаторы, начинающиеся
с буквы или символа “_”, хранятся
в пространстве имен текущего
модуля. Остальные хранятся в
пространстве головного модуля
main. Кроме этого имена STDIN,
STDOUT, STDERR, ARGV, ARGVOUT,
ENV, INC и SIG так же хранятся
в головном модуле.
Таблицы
имен
Все
имена модуля хранятся в ассоциативном
массиве (хеше) с именем модуля,
к которому добавлены символы
“::”. Таким образом имена головного
модуля хранятся в %main::, модуля
'mod1' в %mod1::. Выражение
вида *имя указывает значение
элемента хеша 'имя', это удобно
для определения констант.
Например:
*pi
= \ 3.14159;
Здесь
переменная $pi — это константа
пи, которую уже нельзя изменить.
Конструкторы
и деструкторы
Конструктор
— это подпрограмма, которая
выполняется в момент создания
объекта, а деструктор — удаления
объекта. Для модуля это подпрограммы
с именами BEGIN и END. При определении
этих подпрограмм слово sub можно
опускать.
Конструктор
BEGIN выполняется сразу как
только возможно, то есть, как
только он определен, даже не
завершая дальнейший разбор программы.
Можно указать несколько блоков
BEGIN. Они будут выполняться
один за другим в порядке определения.
Деструктор
END выполняется последним как
только возможно, то есть, при
завершении работы интерпретатора.
Можно указать несколько блоков
END, при этом они будут выполняться
в обратном определению порядке.
Классы
В
Perl нет специального синтаксиса
для классов. Но функционально
полноценными классами могут
быть модули. При этом подпрограммы
модуля становятся методами,
а с помощью массива @ISA можно
реализовать механизм наследования
в классах. Более подробно классы
описаны отдельно.
Создание
библиотеки
Если
вы хотите создать модуль отдельным
файлом и использовать как библиотеку
подпрограмм, при этом вызывать
подпрограммы библиотеки, не
указывая имени модуля, вам необходимо
оформить модуль следующим образом:
package
имя_модуля; # Такое же как и
имя этого файла без расширения
'.pm'
require
Exporter; # Обязательная строка
для экспорта имен
@ISA
= qw(Exporter); # Обязательная
строка для экспорта имен
@EXPORT
= qw(func1 func2) # Перечисляем
имена функций. Внимание! нет
запятой!
@EXPORT_OK
= qw( $переменная @массив );
#
Указать публичные переменные,
массивы, если необходимо
{
# Начало блока модуля
.....
sub
func1
........
sub
func2
........
1;
}
Данный
файл с расширением .pm должен
храниться в одной из библиотечных
директорий Perl. Они перечислены
в массиве @INC, одна из них
обычно /usr/local/lib/perl/.
В
головной программе вы указываете:
use
имя_модуля;
и
вам становятся доступны имена
подпрограмм данного модуля.
Perl
библиотеки
Стандартный
набор библиотек обычно поставляется
с дистрибутивом Perl, они разделяются
на pragma библиотеки (работают
как директивы компилятору) и
стандартные библиотеки.
Pragma
библиотеки
Данные
библиотеки используют как:
use
имя;
когда
хотят включить действие и
no
имя;
когда
выключить.
В
стандартный набор входят следующие
pragma:
diagnostics
Включить
режим расширенной диагностики.
integer
Использовать
целочисленную арифметику.
less
Режим
минимальной загрузки компилятора.
overload
Режим
переопределения операторов.
sigtrap
Режим
слежения за прерываниями.
strict
Режим
ограниченного использования
“опасных” операторов.
subs
Режим
обязательного декларирования
подпрограмм.
Стандартные
библиотеки
AnyDBM_File
Возможность
работы с разными типами баз
данных.
AutoLoader
Загрузка
в память функций только во время
вызова.
AutoSplit
Разделить
модуль для автозагрузки.
Benchmark
Анализ
скорости исполнения программы.
Carp
Предупреждения
об ошибках.
Config
Доступ
к конфигурации Perl.
Cwd
Получить
имя текущей рабочей директории.
DB_File
Работа
с базой данных формата Berkley
DB.
Devel::SelfStubber
Режим
отладки автозагрузки.
DynaLoader
Динамическая
загрузка библиотек C.
English
Использовать
длинные имена встроенных переменных.
Env
Импортировать
имена переменных окружения
Exporter
Обеспечивает
экспорт/импорт для модулей.
ExtUtils::LibList
Определяет
используемые библиотеки.
ExtUtils::MakeMaker
Создает
файл проекта Makefile
ExtUtils::Manifest
Программы
для создания и проверки файла
MANIFEST
ExtUtils::Mkbootstrap
Применение
файла начальной загрузки для
DynaLoader.
Fcntl
Определения
как и в С Fcntl.h
File::Basename
Синтаксический
разбор спецификации файла.
File::CheckTree
Быстрый
проход по директориям диска.
File::Find
Быстрый
поиск файлов по директориям.
FileHandle
Обеспечивает
объектный метод доступа к указателям
файлов.
File::Path
Создание/удаление
директорий.
Getopt::Long
Расширенная
обработка опций.
Getopt::Std
Стандартная
обработка опций.
I18N::Collate
Сравнение
символов локальной кодировки.
IPC::Open2
Межпроцессорный
обмен по чтению и записи.
IPC::Open3
Межпроцессорный
обмен по чтению, записи, и обработки
ошибок.
Net::Ping
Тест
доступа к хосту.
POSIX
Стандартный
интерфейс по IEEE Std 1003.1
SelfLoader
Загрузка
функций только по вызову.
Socket
Определение
структур и констант как и в
С socket.h
Test::Harness
Стандартный
тест с статистикой.
Text::Abbrev
Создание
таблицы сокращений по списку.
CPAN
Программисты
всего мира, работающие с Perl,
создали общедоступную библиотеку
модулей CPAN. Она доступна через
Интернет и содержит огромное
количество различных по назначению
модулей. К ним относятся документаторы,
системные интерфейсы, интерфейсы
работы с базами данных, работа
в сети, с файлами, Интернет-броузеры,
системы поиска, огромное количество
CGI скриптов для Web серверов
и многое-многое другое.
Следующий
урок
|