Библиотеки и модули
Для простых программ вы уже теперь можете свободно писать собственные 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 | Предопределяет имена глобальных переменных |
Модуль | Функция |
Сагр 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 | Приложение А | Приложение Б | Приложение В | Приложение Г | |