| 
 | |
|  | 
В Perl реализован механизм модулей. Модуль это группа подпрограмм и переменных обычно включенных в один файл. Внутри одного модуля можно определить другой модуль. Начало модуля определяется директивой:
Конец модуля это конец блока или файла. Головной модуль имеет по умолчанию имя 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/".
В головной программе вы указываете:
и вам становятся доступны имена подпрограмм данного модуля.
Perl библиотеки.
Стандартный набор библиотек обычно поставляется с дистрибутивом Perl, они разделяются на pragma библиотеки (работают как директивы компилятору) и стандартные библиотеки.
Данные библиотеки используют как:
когда хотят включить действие и
когда выключить.
В стандартный набор входят следующие 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 
Создание таблицы сокращений по
списку. 
Подробное описание каждой библиотеки записано в самом файле.
Программисты всего мира, работающие с Perl, создали общедоступную библиотеку модулей CPAN. Она доступна через Интернет и содержит огромное количество различных по назначению модулей. К ним относятся документаторы, системные интерфейсы, интерфейсы работы с базами данных, работа в сети, с файлами, Интернет-броузеры, системы поиска, огромное количество CGI скриптов для Web серверов и многое-многое другое. Список некоторых CPAN серверов вы можете найти в приложении.
| Закладки на сайте Проследить за страницей | Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |