WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Модули (packages) Perl

Модули (packages) Perl


Дата публикации: 17-03-2013

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

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 имя;

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

В стандартный набор входят следующие pragma:
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

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

Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Cory Dodt:

"Если называть Python заменой BASIC, то тогда и трансформер Optimus Prime — это только замена грузовика."

Опрос

Какой аудио плеер Вы используете?

Winamp
Light Alloy
foobar2000
Apollo
AIMP
1by1
iTunes
jetAudio
Другой...