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