Для простых программ вы уже теперь можете свободно писать собственные Perl-подпрограммы. Когда же задачи, для решения которых вы применяете Perl, станут более сложными, вам иногда будет приходить в голову мысль: "Кто-то, должно быть, это уже делал". И в подавляющем большинстве случаев вы окажетесь правы.
Действительно, другие люди уже написали коды для решения большинства распространенных задач. Более того, они поместили их либо в стандартный дистрибутив Perl, либо в бесплатно загружаемый архив CPAN. Чтобы использовать этот код (и сэкономить немного времени), вам придется разобраться в том, как пользоваться Perl-библиотекой. Этот вопрос вкратце освещался в главе 19.
Одно из преимуществ использования модулей из стандартного дистрибутива состоит в том, что потом вы можете предоставлять свою программу другим пользователям, при этом не придется предпринимать никаких специальных мер. Это объясняется тем, что одна и та же стандартная библиотека доступна Perl-программам практически везде.
Если вы решите обратиться к стандартной библиотеке, то в конечном итоге сэкономите свое время. Нет никакого смысла вновь изобретать велосипед. Следует понимать, однако, что эта библиотека содержит очень много материала. Одни модули могут быть исключительно полезны, тогда как другие совершенно не подходят для решения ваших задач. Например, некоторые модули полезны лишь в том случае, если вы создаете дополнения к языку Perl.
Чтобы прочитать документацию, относящуюся к стандартному модулю, воспользуйтесь программой man или perldoc (если они у вас есть) либо своим Web-броузером, если речь идет о HTML-версиях этой документации. Если ничего не получается, поищите в файлах самого модуля: документация включена в состав каждого модуля (в pod-формате). Чтобы найти модуль у себя в системе, попробуйте выполнить из командной строки следующую Perl-программу:
# для (большинства) Unix-подобных shell
perl -e 'print "@INC\n"'
# для (некоторых) других интерпретаторов команд
perl -e "print join(' ',"@INC),\n"
Вы должны найти модуль в одном из каталогов, перечисленных этой командой.
Терминология
Перед тем как дать перечень всех стандартных модулей, давайте разберемся в терминах.
Пакет
Пакет — это простое устройство управления пространством имен, позволяющее в каждой из двух разных частей Perl-программы иметь свою переменную с именем $fred. Этими пространствами имен управляет объявление package, описанное в главе 5 книги Programming Perl.
Библиотека
Библиотека — это набор подпрограмм определенного назначения. Часто библиотека объявляет себя отдельным пакетом; это позволяет держать в одном месте соответствующие переменные и подпрограммы, чтобы они не мешали другим переменным в вашей программе. Как правило, библиотека старого стиля размещалась в отдельном файле, часто под именем с расширением рl. Библиотечные программы включались в основную программу посредством функции 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. Общее программирование: обработка ошибок и регистрация
Модуль
Функция
Саrр::diagnostics
Выдает сообщения об ошибках. Включает режим диагностики с выдачей предупреждений.
sigtrap
Разрешает обратное прослеживание стека для неожиданных сигналов.
Sys::Syslog
Perl-интерфейс к UNIX-вызовам syslog(3)
Таблица Б.З. Общее программирование: доступ к файлам и их обработка
Модуль
Функция
Pwd
Получает путевое имя текущего рабочего каталога
DirHandle
Выдает методы объектов для работы с дескрипторами каталогов
Fcnti
Загружает С-определения Fcntl.h
File::Basename
Разбирает спецификации файлов
File::CheckTree
Выполняет всевозможные проверки для набора файлов
File::Copy
Копирует файлы или дескрипторы файлов
File::Find
Обеспечивает просмотр дерева файлов
File::Path
Создает и удаляет ряд каталогов
File::Cache
Позволяет одновременно открывать больше файлов, чем разрешает система
FileHandle
Выдает методы объектов для работы с дескрипторами файлов
SelectSaver
Сохраняет и восстанавливает выбранный дескриптор файла
Таблица Б.4. Общее программирование: классы для операций ввода-вывода
Модуль
Функция
IO
Интерфейс верхнего уровня к классам IO::*
IO::File
Методы объектов для работы с дескрипторами файлов
IO::Handle
Методы объектов для дескрипторов ввода-вывода
IO::Pipe
Методы объектов для каналов
IO::Seekable
Методы для объектов ввода-вывода на базе поиска
IO::Select
Объектный интерфейс для выбора
IO::Socket
Объектный интерфейс для портов
Таблица Б.5. Общее программирование: обработка текста и экранные интерфейсы
Модуль
Функция
locale
Использует локализацию POSIX для встроенных операций
Pod::HTML
Конвертирует pod-данные в HTML
Pod::Text
Конвертирует pod-данные в форматированный ASCII-текст
Search::Dict
Ищет ключ в файле словаря
Term::Cap
Интерфейс termcap
Term::Complete
Модуль завершения слов
Text::Abbrev
Создает из списка таблицу сокращений
Text::ParseWords
Разбирает текст на лексемы и создает из них массив
Text::Soundex
Реализует алгоритм Soundex, разработанный Кнутом
Text::Tabs
Раскрывает и сворачивает знаки табуляции
Text::Wrap
Выделяет текст в абзац
Таблица Б.6. Интерфейсы к базам данных
Модуль
Функция
AnyDBMFile
Создает основу для множества DBM
DBFile
Доступ к Berkeley DB
GDBMFile
Связанный доступ к библиотеке GDBM
NDBMFile
Связанный доступ к файлам NDBM
ODBMFile
Связанный доступ к файлам ODBM
SDBMFile
Связанный доступ к файлам SDBM
Таблица Б.7. Математика
Модуль
Функция
Integer
Выполняет арифметические операции в целочисленном формате, а не в формате с двойной точностью
Math::BigFloat
Пакет математических операций для чисел с плавающей запятой произвольной длины
Math::BigInt
Пакет математических операций для целых чисел произвольной длины
Math::Complex
Пакет для комплексных чисел
Таблица Б.8. World Wide Web
Модуль
Функция
CGI
Интерфейс Web-сервера (Common Gateway Interface)
CGI::Apache
Поддержка Perl-модуля сервера Apache
CGI::Carp
Ошибки сервера регистрации с полезной информацией
CGI::Fast
Поддержка FastCGI (устойчивый серверный процесс)
CGI::Push
Поддержка "выталкивания" со стороны сервера
CGI::Switch
Простой интерфейс для многих типов серверов
Таблица Б.9. Сети и межпроцессное взаимодействие
Модуль
Функция
IРС::Ореn2
Открывает процесс для чтения и записи
IPC::Open3
Открывает процесс для чтения, записи и обработки ошибок
Net::Ping
Проверяет, есть ли данный хост в сети
Socket
Загружает С-определения socket.h и манипуляторы структур
Sys::Hostname
Пытается получить хост-имя всеми возможными способами
Таблица Б.10. Автоматизированный доступ к Comprehensive Perl Archive Network
Эффективно определяет местное и среднее гринвичское время
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). О CPAN мы говорили в предисловии.
Вот основные категории модулей, которые можно получить из CPAN:
Модуль формата листинга.
Базовые модули Perl, расширения языка и средства документирования.
Модули, обеспечивающие поддержку разработки.
Интерфейсы операционных систем.
Организация сетей, управление устройствами (модемами) и межпроцессное взаимодействие.
Типы данных и утилиты для типов данных.
Интерфейсы баз данных.
Пользовательские интерфейсы.
Интерфейсы к другим языкам программирования и средства эмуляции этих языков.
Имена файлов, файловые системы и блокировки файлов (см. также дескрипторы файлов).
Обработка строк, обработка текстов, синтаксический анализ и поиск.
Обработка опций, аргументов, параметров и файлов конфигурации.
Интернационализация и локализация.
Аутентификация, защита и шифрование.
World Wide Web, HTML, HTTP, CGI, MIME.
Серверные утилиты и демоны.
Архивирование, сжатие и преобразование.
Изображения, манипулирование картами пикселей и растрами, рисование и построение графиков.
Электронная почта и телеконференции Usenet.
Утилиты управления потоком (обратные вызовы и исключительные ситуации).
Утилиты для работы с дескрипторами файлов, дескрипторами каталогов и потоками ввода-вывода.