* Модули (packages) * 


     В  Пел  реализован  механизм  модулей.  Модуль  это группа
подпрограмм и переменных обычно включенных в один файл.  Внутри
одного  модуля  можно  определить  другой модуль. Начало модуля
определяется директивой:

	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
при этом они будут выполняться в обратном определению порядке.




В Пел нет специального синтаксиса для классов. Но функционально
полноценными классами могут быть модули. При этом подпрограммы модуля
становятся методами, а с помощью массива @ISA можно реализовать
механизм наследования в классах. Более подробно классы описаны отдельно.



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

	package имя_модуля;	# Такое же как и имя этого файла без расширения '.pm'
	require Exporter;	# Обязательная строка для экспорта имен
	@ISA = qw(Exporter);	# -//-
	@EXPORT = qw(func1 func2) # Перечисляем имена функций. Внимание ! нет запятой!
	@EXPORT_OK = qw( $переменная @массив ); # Указать публичные переменные, массивы и т.д. если необходимо
	{  # Начало блока модуля
	.....
	sub func1
	........
	sub func2
	........
	1;
	}

Данный файл с расширением ".pm" должен храниться в одной из библиотечных
директорий Пел. Они перечислены в массиве @INC одно из них обычно
"/usr/local/lib/perl/".

В головной программе вы указываете:

	use имя_модуля;

и вам становятся доступны имена подпрограмм данного модуля.




Стандартный набор библиотек обычно поставляется с дистрибутивом Пел
они разделяются на pragma библиотеки (работают как директивы компилятору)
и стандартные библиотеки.

Pragma библиототеки.

Данные библиотеки используют как:

	use имя;

когда хотят включить действие и

	no имя;

когда выключить.



diagnostics
	Включить режим расширенной диагностики.

integer
	Использовать целочисленную арифметику.

less
	Режим минимальной загрузки компилятора.


overload
	Режим переопределения операторов.

sigtrap
	Режим слежения за прерываниями.

strict
	Режим ограниченного использования "опасных" операторов.

subs
	Режим обязательного декларирования подпрограмм.


Стандартные библиотеки.

AnyDBM_File
	Возможность работы с разными типами баз данных.

AutoLoader
	Загрузка в память функций только во время вызова.

AutoSplit
	Разделить модуль для автозагрузки.

Benchmark
	Анализ скорости исполнения программы.

Carp
	Предупреждения об ошибках.

Config
	Доступ к конфигурации Пел.

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.  Она  доступна  через
Интернет и содержит огромное количество различных по назначению
модулей.
     К   ним   относятся  документаторы,  системные  интерфесы,
интерфейсы работы с базами данных, работа в  сети,  с  файлами,
Интернет-броузеры,  системы  поиска,  огромное  количество  CGI
скриптов для  Web  серверов  и  многое  многое  другое.  Список
некоторых CPAN серверов вы можете найти в приложении.


Last-modified: Thu, 24-Apr-97 17:58:32 GMT