Создание серверных приложений на языке PERL

         

Библиотеки и модули


Для простых программ вы уже теперь можете свободно писать собственные Perl-подпрограммы. Когда же задачи, для решения которых вы применяете Perl, станут более сложными, вам иногда будет приходить в голову мысль: "Кто-то, должно быть, это уже делал". И в подавляющем большинстве случаев вы окажетесь правы.

Действительно, другие люди уже написали коды для решения большинства распространенных задач. Более того, они поместили их либо в стандартный дистрибутив Perl, либо в бесплатно загружаемый архив CPAN. Чтобы использовать этот код (и сэкономить немного времени), вам придется разобраться в том, как пользоваться Perl-библиотекой. Этот вопрос вкратце освещался в главе 19.

Одно из преимуществ использования модулей из стандартного дистрибутива состоит в том, что потом вы можете предоставлять свою программу другим пользователям, при этом не придется предпринимать никаких специальных мер. Это объясняется тем, что одна и та же стандартная библиотека доступна Perl-программам практически везде.

Если вы решите обратиться к стандартной библиотеке, то в конечном итоге сэкономите свое время. Нет никакого смысла вновь изобретать велосипед. Следует понимать, однако, что эта библиотека содержит очень много материала. Одни модули могут быть исключительно полезны, тогда как другие совершенно не подходят для решения ваших задач. Например, некоторые модули полезны лишь в том случае, если вы создаете дополнения к языку Perl.

Чтобы прочитать документацию, относящуюся к стандартному модулю, воспользуйтесь программой man или perldoc (если они у вас есть) либо своим Web-броузером, если речь идет о HTML-версиях этой документации. Если ничего не получается, поищите в файлах самого модуля: документация включена в состав каждого модуля (в pod-формате). Чтобы найти модуль у себя в системе, попробуйте выполнить из командной строки следующую Perl-программу:

# для (большинства) Unix-подобных shell peri -e 'print "@INC\n"'

# для (некоторых) других интерпретаторов команд

peri -e "print join(' ',"@INC),\n"


Вы должны найти модуль в одном из каталогов, перечисленных этой командой.



Терминология



Перед тем как дать перечень всех стандартных модулей, давайте разберемся в терминах.

Пакет

Пакет — это простое устройство управления пространством имен, позволяющее в каждой из двух разных частей Perl-программы иметь свою переменную с именем $fred. Этими пространствами имен управляет объявление package, описанное в главе 5 книги Programming Perl.





Библиотека

Библиотека — это набор подпрограмм определенного назначения. Часто библиотека объявляет себя отдельным пакетом; это позволяет держать в одном месте соответствующие переменные и подпрограммы, чтобы они не мешали другим переменным в вашей программе. Как правило, библиотека старого стиля размещалась в отдельном файле, часто под именем с расширением р1. Библиотечные программы включались в основную программу посредством функции require. He так давно этот подход был заменен использованием модулей (см. следующий абзац), и термин библиотека теперь часто обозначает всю систему модулей, которые поставляются с Perl.

Модуль

Модуль — это библиотека, соответствующая конкретным соглашениям, которая позволяет включать библиотечные подпрограммы в основную программу во время компиляции с помощью директивы use. Имена файлов модулей имеют расширение рт, потому что это необходимо для корректного использования директивы use. Подробно Perl-модули описаны в главе 5 книги Programming Perl.

Прагма

Прагма — это модуль, который воздействует не только на фазу выполнения программы, но и на фазу ее компиляции. Считайте, что прагма содержит подсказки компилятору. В отличие от других модулей, прагмы часто (но не всегда) ограничивают сферу своего влияния самым внутренним охватывающим блоком вашей программы (т.е. блоком, охватывающим вызов прагмы). По соглашению имена прагм состоят из символов нижнего регистра.



Стандартные модули



Ниже приведен перечень всех Perl-прагм и модулей, входящих в текущий дистрибутив языка (версия 5.004). Классификация модулей произвольная.



Таблица Б. 1. Общее программирование: разное

Модуль Функция
autouse Задерживает загрузку модуля до его использования
constant Создает константы периода компиляции
Benchmark Проверяет и сравнивает временные параметры выполне
ния кода
Config Позволяет получить информацию о конфигурации Perl
Env Импортирует переменные среды
English Для пунктуационных переменных использует английские имена или имена на языке awk
FindBin Находит путь к выполняемой в данный момент программе
Getopt::Long Осуществляет расширенную обработку опций командной
строки
Getopt::Std Обрабатывает односимвольные ключи и осуществляет их
кластеризацию
lib Манипулирует массивом @INC во время компиляции
Shell Запускает команды shell прозрачно для Perl
strict Ограничивает использование небезопасных конструкций
Symbol Генерирует анонимное развертывание (glob); уточняет
имена переменных
subs Предопределяет имена подпрограмм
vars Предопределяет имена глобальных переменных
Таблица Б. 2. Общее программирование: обработка ошибок и регистрация

Модуль Функция
Сагр diagnostics sigtrap

Sys::Syslog
Выдает сообщения об ошибках Включает режим диагностики с выдачей предупреждений

Разрешает обратное прослеживание стека для неожиданных сигналов

Perl-интерфейс к UNIX-вызовам syslog(3)
Таблица Б.З. Общее программирование: доступ к файлам и их обработка
Модуль Функция
Cwd DirHandle

Fcnti File::Basename File::CheckTree File:: Copy File::Find File::Path FileCache

FileHandle SelectSaver
Получает путевое имя текущего рабочего каталога

Выдает методы объектов для работы с дескрипторами каталогов

Загружает С-определения Fcntl.h Разбирает спецификации файлов Выполняет всевозможные проверки для набора файлов Копирует файлы или дескрипторы файлов Обеспечивает просмотр дерева файлов Создает и удаляет ряд каталогов

Позволяет одновременно открывать больше файлов, чем разрешает система

Выдает методы объектов для работы с дескрипторами файлов

Сохраняет и восстанавливает выбранный дескриптор файла
Таблица Б. 4. Общее программирование: классы для операций ввода-вывода
Модуль Функция
10 IO::File IO::Handle IO::Pipe IO::Seekable IO::Select IO::Socket Интерфейс верхнего уровня к классам 10::* Методы объектов для работы с дескрипторами файлов Методы объектов для дескрипторов ввода-вывода Методы объектов для каналов Методы для объектов ввода-вывода на базе поиска Объектный интерфейс для выбора Объектный интерфейс для портов
Таблица Б. 5. Общее программирование: обработка текста и экранные интерфейсы
Модуль Функция
locale

Pod::HTML Pod::Text

Search::Dict Term::Cap
Использует локализацию POSIX для встроенных операций

Конвертирует pod-данные в HTML

Конвертирует pod-данные в форматированный ASCII-текст

Ищет ключ в файле словаря Интерфейс termcap
<


Модуль Функция
Term::Complete Text::Abbrev Text::ParseWords Text::Soundex Text::Tabs Text::Wrap Модуль завершения слов Создает из списка таблицу сокращений Разбирает текст на лексемы и создает из них массив Реализует алгоритм Soundex, разработанный Кнутом Раскрывает и сворачивает знаки табуляции Выделяет текст в абзац
Таблица Б. 6. Интерфейсы к базам данных
Модуль Функция
AnyDBMFile DBFile GDBMFile NDBMFile ODBMFile SDBM File Создает основу для множества DBM Доступ к Berkeley DB Связанный доступ к библиотеке GDBM Связанный доступ к файлам NDBM Связанный доступ к файлам ODBM Связанный доступ к файлам SDBM
Таблица Б. 7. Математика
Модуль Функция
Integer Math::BigFloat Math::BigInt Math::Complex Выполняет арифметические операции в целочисленном формате, а не в формате с двойной точностью

Пакет математических операций для чисел с плавающей запятой произвольной длины

Пакет математических операций для целых чисел произвольной длины

Пакет для комплексных чисел
Таблица Б. 8. World Wide Web
Модуль Функция
CGI

CGI::Apache CGI::Carp CGI::Fast CGI::Push CGI:: Switch
Интерфейс Web-сервера (Common Gateway Interface) Поддержка Perl-модуля сервера Apache Ошибки сервера регистрации с полезной информацией Поддержка FastCGI (устойчивый серверный процесс) Поддержка "выталкивания" со стороны сервера Простой интерфейс для многих типов серверов
Таблица Б. 9. Сети и межпроцессное взаимодействие
Модуль Функция
1РС::Ореп2 Открывает процесс для чтения и записи
IPC::Open3 Открывает процесс для чтения, записи и обработки ошибок
Net::Ping Проверяет, есть ли данный хост в сети
Socket Загружает С-определения socket.h и манипуляторы структур
Sys::Hostname Пытается получить хост-имя всеми возможными способами
Таблица Б. 10. Автоматизированный доступ к Comprehensive Perl Archive Network
Модуль Функция
CPAN Простой интерфейс к CPAN
CPAN::FirstTime Утилита для создания файла конфигурации CPAN
CPAN::Nox Запускает CPAN, избегая компилированных расширений
Таблица Б. 11. Время и локализация
Модуль Функция
Time:: Local Эффективно определяет местное и среднее гринвичское
время
I18N::Collate Сравнивает восьмибитовые скалярные данные
Таблица Б. 12. Объектные интерфейсы к встроенным функциям
Модуль Функция
Class::Struct Объявляет struct-подобные типы данных как Perl-классы
File::stat Объектный интерфейс к функции stat
Net::hostent Объектный интерфейс к функциям gethost*
Net::netent Объектный интерфейс к функциям getnet*
Net::protoent Объектный интерфейс к функциям getproto*
Net::servent Объектный интерфейс к функциям getserv*
Time::gmtime Объектный интерфейс к функции gmtime
Time::localtime Объектный интерфейс к функции localtime
Time::tm Внутренний объект для Time::{gm,local}time
User::grent Объектный интерфейс к функциям getgr*
User::pwent Объектный интерфейс к функциям getpw*
<


Таблица Б. 13. Для разработчиков: автозагрузка и динамическая загрузка
Модуль Функция
Autoloader Загружает функции только по требованию
AutoSplit Разбивает пакет для автозагрузки
Devel::SelfStubber Генерирует заглушки для модуля SelfLoading
DynaLoader Автоматическая динамическая загрузка Perl-модулей
SelfLoader Загружает функции только по требованию
Таблица Б. 14. Для разработчиков: расширения языка и поддержка разработки платформ
Модуль Функция
blib Определяет структуру каталогов blib во время построения модулей
ExtUtils::Embed Утилиты для встраивания Perl в С-программы
ExtUtils::Install Инсталлирует файлы
ExtUtils::Liblist Определяет библиотеки для использования и по
рядок их использования
ExtUtils:: MakeMaker Создает Makefile для расширения Perl
ExtUtils: '.Manifest Утилиты для написания и проверки файла MANIFEST
ExtUtils::Miniperl Создает С-код для perlmain.c
ExtUtils: :Mkbootstrap Создает файл самозагрузки для использования модулем DynaLoader
ExtUtils: :Mksymlists Пишет файлы опций компоновщика для динами
ческого расширения
ExtUtils: :MMOS2 Методы для отмены UNIX-режима в ExtUtils::MakeMaker
ExtUtils: :MMUnix Методы, используемые модулем ExtUtils::MakeMaker
ExtUtils::MMVMS Методы для отмены UNIX-режима в ExtUtils::MakeMaker
ExtUtils: :testlib Исправляет @INC для использования только что
созданного расширения
Opcode Блокирует коды операций при компиляции Perl-
кода
ops Прагма для использования с модулем Opcode
POSIX Интерфейс к стандарту IEEE 1003.1
Safe Создает защищенные пространства имен для оценки Perl-кода
Test:: Harness Выполняет стандартные тестовые Perl-сценарии со сбором статистических данных
vmsish Обеспечивает возможности, характерные для VMS
Таблица Б. 15. Для разработчиков: поддержка объектно-ориентированного программирования
Модуль Функция
Exporter Стандартный метод импорта для модулей
overload Перегружает математические операции Perl
Tie::RefHash Базовый класс для связанных хешей со ссылками в
качестве ключей
Tie:: Hash Содержит определения базового класса для связанных хешей
Tie:: Scalar Содержит определения базового класса для связанных
скаляров
Tie::StdHash Содержит определения базового класса для связанных хешей
Tie::StdScalar Содержит определения базового класса для связанных
скаляров
Tie::SubstrHash Обеспечивает хеширование с фиксированным размером таблицы и фиксированной длиной ключей
UNIVERSAL Базовый класс для всех классов
<




CPAN: не только стандартная библиотека



Если вы не можете найти в стандартной библиотеке модуль, соответствующий вашим потребностям, все равно существует вероятность, что кто-то уже написал код, который будет вам полезен. Есть много превосходных библиотечных модулей, которые не включены в стандартный дистрибутив — по различным причинам практического, политического и вздорного характера. Чтобы выяснить, что есть в наличии, можно заглянуть в Comprehensive Perl Archive Network (CPAN). 0 CPAN мы говорили в предисловии.

Вот основные категории модулей, которые можно получить из CPAN:

• Модуль формата листинга.

• Базовые модули Perl, расширения языка и средства документирования.

• Модули, обеспечивающие поддержку разработки.

• Интерфейсы операционных систем.

• Организация сетей, управление устройствами (модемами) и межпроцес-сное взаимодействие.

• Типы данных и утилиты для типов данных.

• Интерфейсы баз данных.

• Пользовательские интерфейсы.

• Интерфейсы к другим языкам программирования и средства эмуляции этих языков.

• Имена файлов, файловые системы и блокировки файлов (см. также дескрипторы файлов).

• Обработка строк, обработка текстов, синтаксический анализ и поиск.

• Обработка опций, аргументов, параметров и файлов конфигурации.

• Интернационализация и локализация.

• Аутентификация, защита и шифрование.

• World Wide Web, HTML, HTTP, CGI, MIME.

• Серверные утилиты и демоны.

• Архивирование, сжатие и преобразование.

• Изображения, манипулирование картами пикселей и растрами, рисование и построение графиков.

• Электронная почта и телеконференции Usenet.

• Утилиты управления потоком (обратные вызовы и исключительные ситуации).

• Утилиты для работы с дескрипторами файлов, дескрипторами каталогов и потоками ввода-вывода.

• Модули для Microsoft Windows.

• Прочие модули.

|     Назад     |     Вперед     |



| Содержание | Предисловие | Введение | Ссылки
| Глава 1 | Глава 2 | Глава 3 | Глава 4 | Глава 5 | Глава 6 | Глава 7 | Глава 8 | Глава 9 | Глава 10
| Глава 11 | Глава 12 | Глава 13 | Глава 14 | Глава 15 | Глава 16 | Глава 17 | Глава 18 | Глава 19
| Приложение А | Приложение Б | Приложение В | Приложение Г |


Содержание раздела