Spec-Zone.ru › Perl 5.30

perlmodlib

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • БИБЛИОТЕКА МОДУЛЕЙ PERL
    • Прагматические модули
    • Стандартные модули
    • Модули расширений
  • CPAN
    • Африка
    • Азия
    • Европа
    • Северная Америка
    • Океания
    • Южная Америка
    • Зеркала RSYNC
  • Модули: Создание, использование и злоупотребление
    • Руководящие принципы создания модулей
    • Руководящие принципы преобразования скриптов библиотеки Perl 4 в модули
    • Руководящие принципы повторного использования кода приложения
  • ПРИМЕЧАНИЕ

НАЗВАНИЕ

perlmodlib - создание новых модулей Perl и поиск существующих

БИБЛИОТЕКА МОДУЛЕЙ PERL

Во многих дистрибутивах Perl включены модули. Описание этих модулей приведено ниже, и все они заканчиваются на .pm. Вы можете обнаружить скомпилированные библиотечные файлы (обычно заканчивающиеся на .so) или небольшие части модулей для автозагрузки (заканчивающиеся на .al); они были автоматически сгенерированы процессом установки. Вы также можете найти в каталоге библиотеки файлы, заканчивающиеся на .pl или .ph. Это старые библиотеки, которые поставляются для того, чтобы старые программы, использующие их, по-прежнему работали. Файлы .pl в конечном итоге будут преобразованы в стандартные модули, а файлы .ph, созданные h2ph, вероятно, превратятся в модули расширений, созданные h2xs. (Некоторые значения .ph могут быть уже доступны через модули POSIX, Errno или Fcntl.) Файл pl2pm в дистрибутиве может помочь в преобразовании, но это просто механический процесс и, следовательно, далёк от безупречности.

Прагматические модули

Они работают примерно как директивы компилятора (прагмы) в том, что они, как правило, влияют на компиляцию вашей программы, и, следовательно, обычно хорошо работают только при использовании в use, или no. Большинство из них обладают лексическим охватом, поэтому внутренний BLOCK может отменить их, сказав:

no integer;
no strict 'refs';
no warnings;

что действует до конца этого BLOCK.

Некоторые прагмы имеют лексический охват — обычно те, которые влияют на $^H переменные подсказок. Другие влияют на текущий пакет, например, use vars и use subs, которые позволяют вам предварительно объявить переменные или подпрограммы в определённом файле, а не только в блоке. Такие объявления действуют для всего файла, для которого они были объявлены. Вы не можете отменить их с помощью no vars или no subs.

Ниже приведены определённые прагмы (и их собственная документация).

attributes

Получение/установка атрибутов подпрограммы или переменной

autodie

Замена функций на те, которые завершаются успешно или с ошибкой с лексическим охватом

autodie::exception

Исключения от функций autodie.

autodie::exception::system

Исключения от функции autodie system().

autodie::hints

Предоставление подсказок о пользовательских подпрограммах для autodie

autodie::skip

Пропуск пакета при броске исключений autodie

autouse

Отложить загрузку модулей до использования функции

base

Установить отношение ISA с базовыми классами во время компиляции

bigint

Поддержка BigInteger для Perl

bignum

Поддержка BigNumber для Perl

bigrat

Поддержка BigNumber/BigRational для Perl

blib

Использование неустановленной версии пакета MakeMaker

bytes

Выделение отдельных байтов символов

charnames

Доступ к именам символов Unicode и именованным последовательностям символов; также определяет имена символов

constant

Объявление констант

deprecate

Прагма Perl для устаревания включения модуля в ядро

diagnostics

Вывод подробных предупреждений об ошибках

encoding

Позволяет писать скрипт в кодировках, отличных от ASCII и UTF-8

encoding::warnings

Выдавать предупреждения при неявных преобразованиях кодировок

experimental

Экспериментальные возможности

feature

Включение новых возможностей

fields

Поля класса во время компиляции

filetest

Управление операторами разрешений filetest

if

Включить модуль Perl, если условие выполняется

integer

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

less

Запрос чего-либо меньше

lib

Управление @INC во время компиляции

locale

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

mro

Порядок разрешения методов

ok

Альтернатива Test::More::use_ok

open

Установка значений по умолчанию для слоёв PerlIO для ввода и вывода

ops

Ограничение небезопасных операций во время компиляции

overload

Пакет для перегрузки операций Perl

overloading

Лексическое управление перегрузкой

parent

Установить отношение ISA с базовыми классами во время компиляции

re

Изменение поведения регулярных выражений

sigtrap

Включение простого обработки сигналов

sort

Управление поведением sort()

strict

Ограничение небезопасных конструкций

subs

Предварительное объявление имён подпрограмм

threads

Потоки Perl на основе интерпретатора

threads::shared

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

utf8

Включение/выключение UTF-8 (или UTF-EBCDIC) в исходном коде

vars

Предварительное объявление имён глобальных переменных

version

Расширение Perl для объектов версии

vmsish

Управление функциями языка, специфичными для VMS

warnings

Управление необязательными предупреждениями

warnings::register

Функция импорта предупреждений

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

Стандартные, интегрированные модули, как ожидается, будут корректно работать с точки зрения загрязнения пространства имён, поскольку они используют модуль Exporter. Подробности смотрите в их собственной документации.

Возможны случаи, когда не все перечисленные ниже модули установлены на вашей системе. Например, модуль GDBM_File не будет установлен, если у вас отсутствует библиотека gdbm.

Amiga::ARexx

Расширение Perl для поддержки ARexx

Amiga::Exec

Расширение Perl для низкоуровневой поддержки Amiga

AnyDBM_File

Предоставляет фреймворк для нескольких DBM

App::Cpan

Легко взаимодействовать с CPAN из командной строки

App::Prove

Реализует команду prove.

App::Prove::State

Хранение состояния для команды prove.

App::Prove::State::Result

Результаты отдельных наборов тестов.

App::Prove::State::Result::Test

Результаты отдельных тестов.

Archive::Tar

Модуль для манипуляций с архивами tar

Archive::Tar::File

Подкласс для извлечения файлов из памяти из Archive::Tar

Attribute::Handlers

Более простое определение обработчиков атрибутов

AutoLoader

Загрузка подпрограмм только по требованию

AutoSplit

Разделение пакета для автозагрузки

B

Бэкенд компилятора Perl

B::Concise

Проход по дереву синтаксиса Perl, вывод краткой информации об операциях

B::Deparse

Бэкенд компилятора Perl для генерации кода Perl

B::Op_private

Определения флагов OP op_private

B::Showlex

Отображение лексических переменных, используемых в функциях или файлах

B::Terse

Проход по дереву синтаксиса Perl, вывод краткой информации об операциях

B::Xref

Генерирует отчеты о перекрестных ссылках для программ Perl

Benchmark

Измерение времени выполнения кода Perl

IO::Socket::IP

Семейно-нейтральный IP-сокет, поддерживающий как IPv4, так и IPv6

Socket

Сетевые константы и вспомогательные функции

CORE

Пространство имен для основных функций Perl

CPAN

Запрос, загрузка и сборка модулей Perl с сайтов CPAN

CPAN::API::HOWTO

Справочник по программированию с CPAN.pm

CPAN::Debug

Внутренняя отладка для CPAN.pm

CPAN::Distroprefs

Чтение и сопоставление distroprefs

CPAN::FirstTime

Утилита для инициализации файла CPAN::Config

CPAN::HandleConfig

Внутренняя обработка конфигурации для CPAN.pm

CPAN::Kwalify

Интерфейс между CPAN.pm и Kwalify.pm

CPAN::Meta

Метаданные о распределении CPAN-пакета

CPAN::Meta::Converter

Преобразование структур метаданных CPAN-распределения

CPAN::Meta::Feature

Необязательная функция, предоставляемая CPAN-распределением

CPAN::Meta::History

История изменений спецификации CPAN Meta

CPAN::Meta::History::Meta_1_0

Спецификация метаданных версии 1.0 для META.yml

CPAN::Meta::History::Meta_1_1

Спецификация метаданных версии 1.1 для META.yml

CPAN::Meta::History::Meta_1_2

Спецификация метаданных версии 1.2 для META.yml

CPAN::Meta::History::Meta_1_3

Спецификация метаданных версии 1.3 для META.yml

CPAN::Meta::History::Meta_1_4

Спецификация метаданных версии 1.4 для META.yml

CPAN::Meta::Merge

Слияние фрагментов метаданных CPAN

CPAN::Meta::Prereqs

Набор предварительных требований к распределению по фазам и типу

CPAN::Meta::Requirements

Набор версионных требований для CPAN-распределения

CPAN::Meta::Spec

Спецификация метаданных CPAN-распределения

CPAN::Meta::Validator

Проверка структур метаданных CPAN-распределения

CPAN::Meta::YAML

Чтение и запись подмножества YAML для файлов CPAN Meta

CPAN::Nox

Обёртка вокруг CPAN.pm без использования модулей XS

CPAN::Plugin

Базовый класс для расширений оболочки CPAN

CPAN::Plugin::Specfile

Пример реализации тривиального CPAN::Plugin

CPAN::Queue

Внутренняя поддержка очереди для CPAN.pm

CPAN::Tarzip

Внутренняя обработка архивов tar для CPAN.pm

CPAN::Version

Вспомогательные функции для сравнения версий CPAN

Carp

Альтернативные warn и die для модулей

Class::Struct

Объявление структурных типов данных в виде классов Perl

Compress::Raw::Bzip2

Низкоуровневый интерфейс к библиотеке сжатия bzip2

Compress::Raw::Zlib

Низкоуровневый интерфейс к библиотеке сжатия zlib

Compress::Zlib

Интерфейс к библиотеке сжатия zlib

Config

Доступ к информации о конфигурации Perl

Config::Extensions

Хеш-таблица, содержащая информацию о включенных ядрах расширений.

Config::Perl::V

Структурированный доступ к выводу perl -V

Cwd

Получение пути текущей рабочей директории

DB

Программный интерфейс к API отладки Perl

DBM_Filter

Фильтрование ключей/значений DBM

DBM_Filter::compress

Фильтр для DBM_Filter

DBM_Filter::encode

Фильтр для DBM_Filter

DBM_Filter::int32

Фильтр для DBM_Filter

DBM_Filter::null

Фильтр для DBM_Filter

DBM_Filter::utf8

Фильтр для DBM_Filter

DB_File

Доступ к Berkeley DB версии 1.x из Perl5

Data::Dumper

Представление perl-данных в виде строк, подходящее для печати и eval

Devel::PPPort

Perl/Pollution/Переносимость

Devel::Peek

Инструмент отладки данных для программистов XS

Devel::SelfStubber

Генерация заглушек для модуля SelfLoading

Digest

Модули, которые вычисляют хеши сообщений

Digest::MD5

Perl-интерфейс к алгоритму MD5

Digest::SHA

Perl-расширение для SHA-1/224/256/384/512

Digest::base

Базовый класс для Digest

Digest::file

Вычисление хешей файлов

DirHandle

(устарело) методы объекта для обработчиков каталогов

Dumpvalue

Предоставляет экранный вывод данных Perl.

DynaLoader

Динамическая загрузка C-библиотек в Perl-код

Encode

Кодировки символов в Perl

Encode::Alias

Определения псевдонимов кодировок

Encode::Byte

Однобайтовые кодировки

Encode::CJKConstants

Используется внутри Encode::??::ISO_2022_*

Encode::CN

Китайские кодировки, основанные на Китае

Encode::CN::HZ

Используется внутри Encode::CN

Encode::Config

Используется внутри Encode

Encode::EBCDIC

Кодировки EBCDIC

Encode::Encoder

Объектно-ориентированный кодер

Encode::Encoding

Базовый класс реализации Encode

Encode::GSM0338

Кодировка ESTI GSM 03.38

Encode::Guess

Угадывание кодировки по данным

Encode::JP

Японские кодировки

Encode::JP::H2Z

Используется внутри Encode::JP::2022_JP*

Encode::JP::JIS7

Используется внутри Encode::JP

Encode::KR

Корейские кодировки

Encode::KR::2022_KR

Используется внутри Encode::KR

Encode::MIME::Header

MIME-кодирование для неструктурированного заголовка электронной почты

Encode::MIME::Name

Используется внутри Encode

Encode::PerlIO

Подробное описание Encode и PerlIO

Encode::Supported

Поддерживаемые Encode кодировки

Encode::Symbol

Кодировки символов

Encode::TW

Китайские кодировки, основанные на Тайване

Encode::Unicode

Различные Unicode Transformation Formats

Encode::Unicode::UTF7

Кодировка UTF-7

English

Использование красивых английских (или awk) имён для уродливых переменных с пунктуацией

Env

Модуль Perl, который импортирует переменные окружения как скаляры или массивы

Errno

Системные константы errno

Exporter

Реализует метод импорта по умолчанию для модулей

Exporter::Heavy

Внутренности Exporter

ExtUtils::CBuilder

Компиляция и компоновка C-кода для Perl-модулей

ExtUtils::CBuilder::Platform::Windows

Класс билдера для платформ Windows

ExtUtils::Command

Утилиты для замены стандартных UNIX команд в файлах Makefile и т.д.

ExtUtils::Command::MM

Команды для использования MM в файлах Makefile

ExtUtils::Constant

Генерация XS-кода для импорта констант из C-заголовков

ExtUtils::Constant::Base
END_OF_DOCUMENT_MARKER

Базовый класс для объектов ExtUtils::Constant.

ExtUtils::Constant::Utils

Вспомогательные функции для ExtUtils::Constant.

ExtUtils::Constant::XS

Генерация кода C для констант модулей XS.

ExtUtils::Embed

Утилиты для встраивания Perl в приложения C/C++.

ExtUtils::Install

Установка файлов из одной точки в другую.

ExtUtils::Installed

Управление инвентарем установленных модулей.

ExtUtils::Liblist

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

ExtUtils::MM

Подстройка ExtUtils::MakeMaker под конкретную операционную систему.

ExtUtils::MM_AIX

Подкласс ExtUtils::MM_Unix, специфичный для AIX.

ExtUtils::MM_Any

Методы ExtUtils::MakeMaker, независимые от платформы.

ExtUtils::MM_BeOS

Методы для переопределения поведения UN*X в ExtUtils::MakeMaker.

ExtUtils::MM_Cygwin

Методы для переопределения поведения UN*X в ExtUtils::MakeMaker.

ExtUtils::MM_DOS

Подкласс ExtUtils::MM_Unix, специфичный для DOS.

ExtUtils::MM_Darwin

Специальное поведение для OS X.

ExtUtils::MM_MacOS

Создание Makefile для MacOS Classic.

ExtUtils::MM_NW5

Методы для переопределения поведения UN*X в ExtUtils::MakeMaker.

ExtUtils::MM_OS2

Методы для переопределения поведения UN*X в ExtUtils::MakeMaker.

ExtUtils::MM_QNX

Подкласс ExtUtils::MM_Unix, специфичный для QNX.

ExtUtils::MM_UWIN

Подкласс ExtUtils::MM_Unix, специфичный для U/WIN.

ExtUtils::MM_Unix

Методы, используемые ExtUtils::MakeMaker.

ExtUtils::MM_VMS

Методы для переопределения поведения UN*X в ExtUtils::MakeMaker.

ExtUtils::MM_VOS

Подкласс ExtUtils::MM_Unix, специфичный для VOS.

ExtUtils::MM_Win32

Методы для переопределения поведения UN*X в ExtUtils::MakeMaker.

ExtUtils::MM_Win95

Методы для настройки MakeMaker для Win9X.

ExtUtils::MY

Подкласс ExtUtils::MakeMaker для кастомизации.

ExtUtils::MakeMaker

Создание Makefile для модуля.

ExtUtils::MakeMaker::Config

Обёртка над Config.pm.

ExtUtils::MakeMaker::FAQ

Часто задаваемые вопросы о MakeMaker.

ExtUtils::MakeMaker::Locale

Встроенный Encode::Locale.

ExtUtils::MakeMaker::Tutorial

Написание модуля с помощью MakeMaker.

ExtUtils::Manifest

Утилиты для создания и проверки файла MANIFEST.

ExtUtils::Miniperl

Генерация кода C для miniperlmain.c и perlmain.c.

ExtUtils::Mkbootstrap

Создание файла bootstrap для использования DynaLoader.

ExtUtils::Mksymlists

Генерация файлов опций для линковки динамических расширений.

ExtUtils::Packlist

Управление файлами .packlist.

ExtUtils::ParseXS

Преобразование Perl XS кода в код C.

ExtUtils::ParseXS::Constants

Значения инициализации для некоторых глобальных переменных.

ExtUtils::ParseXS::Eval

Чистый пакет для вычисления кода.

ExtUtils::ParseXS::Utilities

Подпрограммы, используемые с ExtUtils::ParseXS.

ExtUtils::Typemaps

Чтение/запись/модификация файлов typemap Perl/XS.

ExtUtils::Typemaps::Cmd

Быстрые команды для обработки typemap.

ExtUtils::Typemaps::InputMap

Элемент раздела INPUT typemap.

ExtUtils::Typemaps::OutputMap

Элемент раздела OUTPUT typemap.

ExtUtils::Typemaps::Type

Элемент раздела TYPEMAP typemap.

ExtUtils::XSSymSet

Поддержка множеств имён символов, подходящих для линковщика VMS.

ExtUtils::testlib

Добавление каталогов blib/* в @INC.

Fatal

Замена функций эквивалентами, которые либо завершаются успешно, либо выдают ошибку.

Fcntl

Загрузка определений C Fcntl.h.

File::Basename

Разбор путей к файлам на директорию, имя файла и расширение.

File::Compare

Сравнение файлов или файловых дескрипторов.

File::Copy

Копирование файлов или файловых дескрипторов.

File::DosGlob

Глоббинг в стиле DOS и немного больше.

File::Fetch

Универсальный механизм загрузки файлов.

File::Find

Обход дерева каталогов.

File::Glob

Расширение Perl для функции BSD glob.

File::GlobMapper

Расширение File::Glob для работы с входными и выходными файлами.

File::Path

Создание или удаление древовидных каталогов.

File::Spec

Портативное выполнение операций с именами файлов.

File::Spec::AmigaOS

File::Spec для AmigaOS.

File::Spec::Cygwin

Методы для спецификаций файлов Cygwin.

File::Spec::Epoc

Методы для спецификаций файлов Epoc.

File::Spec::Functions

Портативное выполнение операций с именами файлов.

File::Spec::Mac

File::Spec для Mac OS (Classic).

File::Spec::OS2

Методы для спецификаций файлов OS/2.

File::Spec::Unix

File::Spec для Unix, база для других модулей File::Spec.

File::Spec::VMS

Методы для спецификаций файлов VMS.

File::Spec::Win32

Методы для спецификаций файлов Win32.

File::Temp

Безопасное получение имени и дескриптора временного файла.

File::stat

Интерфейс по имени к встроенным функциям Perl stat().

FileCache

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

FileHandle

Предоставление объектных методов для файловых дескрипторов.

Filter::Simple

Упрощённое фильтрации исходного кода.

Filter::Util::Call

Утилитарный модуль Perl для фильтрации исходного кода.

FindBin

Определение каталога исходного скрипта Perl.

GDBM_File

Доступ Perl5 к библиотеке gdbm.

Getopt::Long

Расширенная обработка командных строк.

Getopt::Std

Обработка односимвольных ключей с объединением ключей.

HTTP::Tiny

Маленький, простой и корректный HTTP/1.1 клиент.

Hash::Util

Набор общих утилит для работы с хэшами.

Hash::Util::FieldHash

Поддержка классов «внутреннего» вида.

I18N::Collate

Сравнение данных 8-битных скаляров в соответствии с текущим языком.

I18N::LangTags

Функции для работы с тегами языков в формате RFC3066.

I18N::LangTags::Detect

Определение предпочтений пользователя в отношении языка.

I18N::LangTags::List

Теги и названия языков.

I18N::Langinfo

Получение информации о языке.

IO

Загрузка различных модулей IO.

IO::Compress::Base

Базовый класс для модулей IO::Compress.

IO::Compress::Bzip2

Запись файлов/буферов в формате bzip2.

IO::Compress::Deflate

Запись файлов/буферов в формате RFC 1950.

IO::Compress::FAQ

Часто задаваемые вопросы о IO::Compress.

IO::Compress::Gzip

Запись файлов/буферов в формате RFC 1952.

IO::Compress::RawDeflate

Запись файлов/буферов в формате RFC 1951.

IO::Compress::Zip

Запись файлов/буферов в формате zip.

IO::Dir

Предоставление объектных методов для дескрипторов каталогов.

IO::File

Предоставление объектных методов для файловых дескрипторов.

IO::Handle

Предоставление объектных методов для дескрипторов ввода/вывода.

IO::Pipe

Предоставление объектных методов для каналов.

IO::Poll

Объектный интерфейс к системному вызову poll.

IO::Seekable

Предоставление методов позиционирования для объектов ввода/вывода.

IO::Select

Объектный интерфейс к системному вызову select.

IO::Socket

Объектный интерфейс для сокет-связи.

IO::Socket::INET

Объектный интерфейс для сокетов домена AF_INET.

IO::Socket::UNIX

Объектный интерфейс для сокетов домена AF_UNIX.

IO::Uncompress::AnyInflate

Разархивирование файлов/буферов, сжатых с помощью zlib (zip, gzip).

IO::Uncompress::AnyUncompress

Разархивирование файлов/буферов, сжатых gzip, zip, bzip2 или lzop.

IO::Uncompress::Base

Базовый класс для модулей IO::Uncompress.

IO::Uncompress::Bunzip2

Чтение файлов/буферов в формате bzip2.

IO::Uncompress::Gunzip

Чтение файлов/буферов в формате RFC 1952.

IO::Uncompress::Inflate

Чтение файлов/буферов в формате RFC 1950.

IO::Uncompress::RawInflate

Чтение файлов/буферов в формате RFC 1951.

IO::Uncompress::Unzip

Чтение файлов/буферов в формате zip.

IO::Zlib

Интерфейс в стиле IO к Compress::Zlib.

IPC::Cmd

Упрощение поиска и запуска системных команд

IPC::Msg

Класс объектов IPC SysV Msg

IPC::Open2

Открыть процесс для чтения и записи с использованием open2()

IPC::Open3

Открыть процесс для чтения, записи и обработки ошибок с использованием open3()

IPC::Semaphore

Класс объектов IPC SysV Semaphore

IPC::SharedMem

Класс объектов IPC SysV Shared Memory

IPC::SysV

Константы и системные вызовы IPC System V

Internals

Зарезервированное специальное пространство имён для внутренних функций

JSON::PP

Чистый модуль Perl, совместимый с JSON::XS.

JSON::PP::Boolean

Модуль-заглушка, предоставляющий JSON::PP::Boolean

List::Util

Набор общих утилитных подпрограмм для списков

List::Util::XS

Указывает, был ли List::Util скомпилирован с компилятором C

Locale::Maketext

Фреймворк для локализации

Locale::Maketext::Cookbook

Рецепты использования Locale::Maketext

Locale::Maketext::Guts

Устаревший модуль для загрузки кода Locale::Maketext utf8

Locale::Maketext::GutsLoader

Устаревший модуль для загрузки кода Locale::Maketext utf8

Locale::Maketext::Simple

Простой интерфейс к Locale::Maketext::Lexicon

Locale::Maketext::TPJ13

Статья о локализации программного обеспечения

MIME::Base64

Кодирование и декодирование строк base64

MIME::QuotedPrint

Кодирование и декодирование строк quoted-printable

Math::BigFloat

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

Math::BigInt

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

Math::BigInt::Calc

Чистый модуль Perl для поддержки Math::BigInt

Math::BigInt::FastCalc

Math::BigInt::Calc с некоторыми XS для большей скорости

Math::BigInt::Lib

Виртуальный базовый класс для библиотек Math::BigInt

Math::BigRat

Рациональные числа произвольной большой длины

Math::Complex

Комплексные числа и связанные с ними математические функции

Math::Trig

Тригонометрические функции

Memoize

Ускорение функций за счёт обмена места на время

Memoize::AnyDBM_File

Модуль-соединитель для предоставления EXISTS для AnyDBM_File для использования Storable

Memoize::Expire

Модуль-плагин для автоматического истечения срока действия кешированных значений

Memoize::ExpireFile

Тест семантики истечения срока действия Memoize

Memoize::ExpireTest

Тест семантики истечения срока действия Memoize

Memoize::NDBM_File

Модуль-соединитель для предоставления EXISTS для NDBM_File для использования Storable

Memoize::SDBM_File

Модуль-соединитель для предоставления EXISTS для SDBM_File для использования Storable

Memoize::Storable

Сохранение кешированных данных в базе данных Storable

Module::CoreList

Модули, поставлявшиеся с версиями Perl

Module::CoreList::Utils

Утилиты, поставлявшиеся с версиями Perl

Module::Load

Динамическое подключающее модули и файлы

Module::Load::Conditional

Поиск информации о модулях/динамическая загрузка во время выполнения

Module::Loaded

Отмечать модули как загруженные или разгруженные

Module::Metadata

Сбор информации о пакетах и POD из файлов модулей Perl

NDBM_File

Связанный доступ к файлам ndbm

NEXT

Предоставление псевдокласса NEXT (и т.д.), позволяющего повторно направлять методы

Net::Cmd

Класс сетевых команд (как используется в FTP, SMTP и т.д.)

Net::Config

Данные локальной конфигурации для libnet

Net::Domain

Попытка определить текущее имя хоста и домен в интернете

Net::FTP

Класс клиента FTP

Net::FTP::dataconn

Класс подключения данных клиента FTP

Net::NNTP

Класс клиента NNTP

Net::Netrc

Объектно-ориентированный интерфейс к файлу netrc пользователя

Net::POP3

Класс клиента Post Office Protocol 3 (RFC1939)

Net::Ping

Проверка доступности удалённого хоста

Net::SMTP

Клиент Simple Mail Transfer Protocol

Net::Time

Интерфейс сетевого клиента для времени и дневного времени

Net::hostent

Интерфейс по имени к встроенным функциям Perl gethost*()

Net::libnetFAQ

Часто задаваемые вопросы о libnet

Net::netent

Интерфейс по имени к встроенным функциям Perl getnet*()

Net::protoent

Интерфейс по имени к встроенным функциям Perl getproto*()

Net::servent

Интерфейс по имени к встроенным функциям Perl getserv*()

O

Общий интерфейс к бэкендам компилятора Perl

ODBM_File

Связанный доступ к файлам odbm

Opcode

Отключить именованные opcodes при компиляции кода Perl

POSIX

Интерфейс Perl к IEEE Std 1003.1

Params::Check

Общий механизм анализа/проверки входных данных.

Parse::CPAN::Meta

Парсинг файлов META.yml и META.json с метаданными CPAN

Perl::OSType

Сопоставление имён операционных систем Perl с общими типами

PerlIO

Загрузчик по требованию для слоёв PerlIO и корень пространства имён PerlIO::*

PerlIO::encoding

Слой кодирования

PerlIO::mmap

Встроенный в память ввод/вывод

PerlIO::scalar

Встроенный в память ввод/вывод, скалярный ввод/вывод

PerlIO::via

Вспомогательный класс для слоёв PerlIO, реализованных на Perl

PerlIO::via::QuotedPrint

Слой PerlIO для строк quoted-printable

Pod::Checker

Проверка документов pod на синтаксические ошибки

Pod::Escapes

Для обработки последовательностей Pod E<...>

Pod::Find

Поиск документов POD в древовидных директориях

Pod::Functions

Группировка функций Perl по образцу perlfunc.pod

Pod::Html

Модуль для преобразования файлов pod в HTML

Pod::InputObjects

Объекты, представляющие абзацы, команды и т.д. входных данных POD

Pod::Man

Преобразование данных POD в отформатированный вход *roff

Pod::ParseLink

Разбор кода форматирования L<> в тексте POD

Pod::ParseUtils

Вспомогательные функции для парсинга и преобразования POD

Pod::Parser

Базовый класс для создания фильтров и переводчиков POD

Pod::Perldoc

Поиск документации Perl в формате Pod.

Pod::Perldoc::BaseTo

Основа для форматировщиков Pod::Perldoc

Pod::Perldoc::GetOptsOO

Настраиваемый анализатор опций для Pod::Perldoc

Pod::Perldoc::ToANSI

Вывод Pod с ANSI цветовыми escape-последовательностями

Pod::Perldoc::ToChecker

Позволяет Perldoc проверять Pod на ошибки

Pod::Perldoc::ToMan

Позволяет Perldoc рендерить Pod как man-страницы

Pod::Perldoc::ToNroff

Позволяет Perldoc преобразовывать Pod в nroff

Pod::Perldoc::ToPod

Позволяет Perldoc рендерить Pod как ... Pod!

Pod::Perldoc::ToRtf

Позволяет Perldoc рендерить Pod как RTF

Pod::Perldoc::ToTerm

Вывод Pod с escape-последовательностями терминала

Pod::Perldoc::ToText

Позволяет Perldoc рендерить Pod как обычный текст

Pod::Perldoc::ToTk

Позволяет Perldoc использовать Tk::Pod для рендеринга Pod

Pod::Perldoc::ToXml

Позволяет Perldoc рендерить Pod как XML

Pod::PlainText

Преобразование данных POD в форматированный ASCII текст

Pod::Select

Извлечение выбранных разделов POD из входных данных

Pod::Simple

Фреймворк для парсинга Pod

Pod::Simple::Checker

Проверка синтаксиса Pod документа

Pod::Simple::Debug

Включение отладки/трассировки в Pod::Simple

Pod::Simple::DumpAsText

Вывести события парсинга Pod в текстовом формате

Pod::Simple::DumpAsXML

Преобразование Pod в XML

Pod::Simple::HTML

Преобразование Pod в HTML

Pod::Simple::HTMLBatch

Преобразование нескольких файлов Pod в несколько HTML файлов

Pod::Simple::LinkSection

Представление атрибутов "раздела" кодов L

Pod::Simple::Methody

Преобразование событий Pod::Simple в вызовы методов

Pod::Simple::PullParser

Интерфейс pull-парсера для парсинга Pod

Pod::Simple::PullParserEndToken

Заключительные токены Pod::Simple::PullParser

Pod::Simple::PullParserStartToken

Начальные токены Pod::Simple::PullParser

Pod::Simple::PullParserTextToken

Текстовые токены Pod::Simple::PullParser

Pod::Simple::PullParserToken

Токены Pod::Simple::PullParser

Pod::Simple::RTF
END_OF_DOCUMENT_MARKER

Форматирование Pod как RTF

Pod::Simple::Search

Поиск документов POD в дереве каталогов

Pod::Simple::SimpleTree

Разбор Pod в простое дерево разбора

Pod::Simple::Subclassing

Написание форматера как подкласс Pod::Simple

Pod::Simple::Text

Форматирование Pod как обычный текст

Pod::Simple::TextContent

Получение текстового содержимого Pod

Pod::Simple::XHTML

Форматирование Pod как валидный XHTML

Pod::Simple::XMLOutStream

Преобразование Pod в XML

Pod::Text

Преобразование данных POD в форматированный текст

Pod::Text::Color

Преобразование данных POD в форматированный цветной текст ASCII

Pod::Text::Overstrike

Преобразование данных POD в форматированный текст с перечеркиванием

Pod::Text::Termcap

Преобразование данных POD в текст ASCII с кодами форматирования

Pod::Usage

Вывод сообщения об использовании из встроенной документации pod

SDBM_File

Связанный доступ к файлам sdbm

Safe

Компиляция и выполнение кода в ограниченных отсеках

Scalar::Util

Подборка общих утилит для скаляров

Search::Dict

Поиск ключа в словаре в файле

SelectSaver

Сохранение и восстановление выбранного дескриптора файла

SelfLoader

Загрузка функций только по требованию

Storable

Сохранение данных структур Perl для последующего использования

Sub::Util

Подборка утилит для подпрограмм и ссылок на код

Symbol

Работа с символами Perl и их именами

Sys::Hostname

Попытка получить имя хоста всеми возможными способами

Sys::Syslog

Интерфейс Perl к вызовам UNIX syslog(3)

Sys::Syslog::Win32

Поддержка Win32 для Sys::Syslog

TAP::Base

Базовый класс, обеспечивающий общие функции для TAP::Parser

TAP::Formatter::Base

Базовый класс для делегатов вывода хэндлеров

TAP::Formatter::Color

Запуск скриптов тестов Perl с использованием цвета

TAP::Formatter::Console

Делегат вывода хэндлера для стандартного консольного вывода

TAP::Formatter::Console::ParallelSession

Делегат вывода хэндлера для параллельного консольного вывода

TAP::Formatter::Console::Session

Делегат вывода хэндлера для стандартного консольного вывода

TAP::Formatter::File

Делегат вывода хэндлера для вывода в файл

TAP::Formatter::File::Session

Делегат вывода хэндлера для вывода в файл

TAP::Formatter::Session

Абстрактный базовый класс для делегатов вывода хэндлеров

TAP::Harness

Запуск скриптов тестов со статистикой

TAP::Harness::Env

Парсинг переменных окружения, относящихся к хэндлеру, где это уместно

TAP::Object

Базовый класс, предоставляющий общие функциональные возможности для всех TAP::* модулей

TAP::Parser

Парсинг выходных данных TAP

TAP::Parser::Aggregator

Агрегирование результатов TAP::Parser

TAP::Parser::Grammar

Грамматика для Протокола тестирования чего угодно.

TAP::Parser::Iterator

Базовый класс для итераторов источника TAP

TAP::Parser::Iterator::Array

Итератор для массиво-ориентированных источников TAP

TAP::Parser::Iterator::Process

Итератор для источников TAP, основанных на процессах

TAP::Parser::Iterator::Stream

Итератор для источников TAP, основанных на дескрипторах файлов

TAP::Parser::IteratorFactory

Определяет объекты SourceHandler, которые следует использовать для данного Source

TAP::Parser::Multiplexer

Мультиплексирование нескольких TAP::Parsers

TAP::Parser::Result

Базовый класс для выходных объектов TAP::Parser

TAP::Parser::Result::Bailout

Токен результата отказа.

TAP::Parser::Result::Comment

Токен результата комментария.

TAP::Parser::Result::Plan

Токен результата плана.

TAP::Parser::Result::Pragma

Токен результата прагмы TAP.

TAP::Parser::Result::Test

Токен результата теста.

TAP::Parser::Result::Unknown

Токен результата неизвестного типа.

TAP::Parser::Result::Version

Токен результата версии синтаксиса TAP.

TAP::Parser::Result::YAML

Токен результата YAML.

TAP::Parser::ResultFactory

Фабрика для создания выходных объектов TAP::Parser

TAP::Parser::Scheduler

Планирование тестов во время параллельного тестирования

TAP::Parser::Scheduler::Job

Одно задание тестирования.

TAP::Parser::Scheduler::Spinner

Задача бездействия.

TAP::Parser::Source

Источник TAP и метаданные о нём

TAP::Parser::SourceHandler

Базовый класс для различных обработчиков источников TAP

TAP::Parser::SourceHandler::Executable

Поток вывода от исполняемого источника TAP

TAP::Parser::SourceHandler::File

Поток TAP из текстового файла.

TAP::Parser::SourceHandler::Handle

Поток TAP из IO::Handle или GLOB.

TAP::Parser::SourceHandler::Perl

Поток TAP из исполняемой программы Perl

TAP::Parser::SourceHandler::RawTAP

Поток вывода от исходного TAP в скалярной/массивовой ссылке.

TAP::Parser::YAMLish::Reader

Чтение данных YAMLish из итератора

TAP::Parser::YAMLish::Writer

Запись данных YAMLish

Term::ANSIColor

Вывод на цветной экран с использованием ANSI escape-последовательностей

Term::Cap

Интерфейс Perl для termcap

Term::Complete

Модуль Perl для автодополнения слов

Term::ReadLine

Интерфейс Perl к различным readline пакетам.

Test

Обеспечивает простую структуру для написания скриптов тестов

Test2

Фреймворк для написания инструментов тестирования, которые все работают вместе.

Test2::API

Основной интерфейс для написания инструментов тестирования на основе Test2.

Test2::API::Breakage

Что сломано в какой версии

Test2::API::Context

Объект для представления контекста тестирования.

Test2::API::Instance

Объект, используемый Test2::API внутри.

Test2::API::Stack

Объект для управления стеком Test2::Hub

Test2::Event

Базовый класс для событий

Test2::Event::Bail

Отказ!

Test2::Event::Diag

Тип события Diag

Test2::Event::Encoding

Устанавливает кодировку для потока вывода

Test2::Event::Exception

Событие исключения

Test2::Event::Fail

Событие для простого неудачного утверждения

Test2::Event::Generic

Тип общего события.

Test2::Event::Note

Тип события заметки

Test2::Event::Ok

Тип события Ok

Test2::Event::Pass

Событие для простого прошедшего утверждения

Test2::Event::Plan

Событие плана

Test2::Event::Skip

Тип события пропуска

Test2::Event::Subtest

Событие для типов подтестов

Test2::Event::TAP::Version

Событие для версии TAP.

Test2::Event::V2

Событие второго поколения.

Test2::Event::Waiting

Уведомить все процессы/потоки о необходимости завершения работы

Test2::EventFacet

Базовый класс для всех аспектов событий.

Test2::EventFacet::About

Аспект с деталями события.

Test2::EventFacet::Amnesty

Аспект для помилования утверждений.

Test2::EventFacet::Assert

Аспект, представляющий утверждение.

Test2::EventFacet::Control

Аспект для действий и поведения хаба.

Test2::EventFacet::Error

Аспект для ошибок, которые необходимо отобразить.

Test2::EventFacet::Hub

Аспект для хабов, через которые проходит событие.

Test2::EventFacet::Info

Аспект для информации, которая может быть важна для разработчика.

Test2::EventFacet::Info::Table

Промежуточная форма представления таблицы.

Test2::EventFacet::Meta

Аспект для метаданных

Test2::EventFacet::Parent

Аспект для событий, содержащих другие события

Test2::EventFacet::Plan

Аспект для задания плана

END_OF_DOCUMENT_MARKER
Test2::EventFacet::Render

Модуль, определяющий, как отображать событие.

Test2::EventFacet::Trace

Отладочная информация для событий

Test2::Formatter

Пространство имён для форматеров.

Test2::Formatter::TAP

Стандартный форматер TAP

Test2::Hub

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

Test2::Hub::Interceptor

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

Test2::Hub::Interceptor::Terminator

Класс исключений, используемый

Test2::Hub::Subtest

Центральный узел, используемый подтестами

Test2::IPC

Включить IPC для поддержки потоков или форков.

Test2::IPC::Driver

Базовый класс для драйверов Test2 IPC.

Test2::IPC::Driver::Files

Модель временной директории + файлы для конкурентного доступа.

Test2::Tools::Tiny

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

Test2::Transition

Примечания к переходу при обновлении до Test2

Test2::Util

Инструменты, используемые Test2 и его друзьями.

Test2::Util::ExternalMeta

Разрешить сторонним инструментам безопасно присоединять метаданные

Test2::Util::Facets2Legacy

Преобразовать данные аспектов в устаревший API событий.

Test2::Util::HashBase

Создать классы на основе хэшей.

Test2::Util::Trace

Устаревший оберточный класс для Test2::EventFacet::Trace.

Test::Builder

Бэкенд для создания библиотек тестов

Test::Builder::Formatter

Подкласс Test::Builder класса Test2::Formatter::TAP

Test::Builder::IO::Scalar

Копия IO::Scalar для Test::Builder

Test::Builder::Module

Базовый класс для модулей тестов

Test::Builder::Tester

Тестирование наборов тестов, созданных с помощью

Test::Builder::Tester::Color

Включить цвет в Test::Builder::Tester

Test::Builder::TodoDiag

Подкласс Test::Builder класса Test2::Event::Diag

Test::Harness

Запуск стандартных скриптов тестов Perl со статистикой

Test::Harness::Beyond

За пределами make test

Test::More

Ещё одна платформа для написания скриптов тестов

Test::Simple

Базовые утилиты для написания тестов.

Test::Tester

Упрощение тестирования модулей тестов, созданных с помощью Test::Builder

Test::Tester::Capture

Помощь в тестировании модулей тестов, созданных с помощью Test::Builder

Test::Tester::CaptureRunner

Помощь в тестировании модулей тестов, созданных с помощью Test::Builder

Test::Tutorial

Руководство по написанию очень простых тестов

Test::use::ok

Альтернатива Test::More::use_ok

Text::Abbrev

Abbrev - создание таблицы сокращений из списка

Text::Balanced

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

Text::ParseWords

Разбор текста в массив токенов или массив массивов

Text::Tabs

Расширение и сокращение табуляций, как в unix expand(1) и unexpand(1)

Text::Wrap

Перенос строк для создания простых абзацев

Thread

Управление потоками в Perl (только для старого кода)

Thread::Queue

Потокобезопасные очереди

Thread::Semaphore

Потокобезопасные семафоры

Tie::Array

Базовый класс для связанных массивов

Tie::File

Доступ к строкам файла на диске через массив Perl

Tie::Handle

Базовые определения классов для связанных дескрипторов файлов

Tie::Hash

Базовые определения классов для связанных хешей

Tie::Hash::NamedCapture

Буферы именованного захвата регулярных выражений

Tie::Memoize

Добавление данных в хеш при необходимости

Tie::RefHash

Использование ссылок в качестве ключей хешей

Tie::Scalar

Базовые определения классов для связанных скаляров

Tie::StdHandle

Базовые определения классов для связанных дескрипторов файлов

Tie::SubstrHash

Хэширование с фиксированным размером таблицы и длиной ключа

Time::HiRes

Таймеры высокой точности для сигналов, сна и получения времени, интервальные таймеры

Time::Local

Эффективное вычисление времени по местному и Гринвичскому времени

Time::Piece

Объектно-ориентированные объекты времени

Time::Seconds

Простой API для преобразования секунд в другие значения даты

Time::gmtime

Интерфейс по имени к встроенной функции Perl gmtime()

Time::localtime

Интерфейс по имени к встроенной функции Perl localtime()

Time::tm

Внутренний объект, используемый Time::gmtime и Time::localtime

UNIVERSAL

Базовый класс для ВСЕХ классов (объектов ссылок)

Unicode::Collate

Алгоритм сортировки Юникода

Unicode::Collate::CJK::Big5

Весовой коэффициент для CJK Unified Ideographs

Unicode::Collate::CJK::GB2312

Весовой коэффициент для CJK Unified Ideographs

Unicode::Collate::CJK::JISX0208

Весовой коэффициент для JIS KANJI для Unicode::Collate

Unicode::Collate::CJK::Korean

Весовой коэффициент для CJK Unified Ideographs

Unicode::Collate::CJK::Pinyin

Весовой коэффициент для CJK Unified Ideographs

Unicode::Collate::CJK::Stroke

Весовой коэффициент для CJK Unified Ideographs

Unicode::Collate::CJK::Zhuyin

Весовой коэффициент для CJK Unified Ideographs

Unicode::Collate::Locale

Языковая настройка для DUCET через Unicode::Collate

Unicode::Normalize

Формы нормализации Юникода

Unicode::UCD

База данных символов Юникода

User::grent

Интерфейс по имени к встроенным функциям Perl getgr*

User::pwent

Интерфейс по имени к встроенным функциям Perl getpw*

VMS::DCLsym

Расширение Perl для работы с символами DCL

VMS::Filespec

Преобразование между VMS и Unix синтаксисом спецификаций файлов

VMS::Stdio

Стандартные функции ввода/вывода через расширения VMS

Win32

Интерфейсы к некоторым функциям Win32 API

Win32API::File

Прямой доступ к вызовам Win32 API для файлов/каталогов.

Win32CORE

Заглушки для функций Win32 CORE

XS::APItest

Тестирование API Perl C

XS::Typemap

Модуль для тестирования таблиц типов XS, поставляемых с Perl

XSLoader

Динамическая загрузка библиотек C в код Perl

autodie::Scope::Guard

Обёртка класса для вызова подпрограмм в конце области видимости

autodie::Scope::GuardStack

Стек хуков для управления областями видимости через %^H

autodie::Util

Внутренние вспомогательные подпрограммы для autodie и Fatal

version::Internals

Расширение Perl для объектов версии

Чтобы узнать все установленные на вашей системе модули, включая те, у которых нет документации или которые находятся вне стандартного релиза, просто используйте следующую команду (в стандартной оболочке Win32 следует использовать двойные кавычки вместо одинарных).

% perl -MFile::Find=find -MFile::Spec::Functions -Tlwe \
  'find { wanted => sub { print canonpath $_ if /\.pm\z/ },
  no_chdir => 1 }, @INC'

(Флаг -T нужен для предотвращения перечисления '.' в @INC.) У них все должны быть установлены собственные справочные материалы и доступны через команду man(1) вашей системы. Если у вас нет программы find, вы можете использовать программу Perl find2perl вместо неё, которая генерирует Perl-код для запуска через perl. Если у вас есть программа man, но она не находит ваши модули, вам придётся настроить путь к man. Смотрите perl для получения подробностей. Если у вас нет системной команды man, попробуйте программу perldoc.

Обратите также внимание, что команда perldoc perllocal даёт вам (возможно, неполный) список модулей, которые были дополнительно установлены на вашей системе. (Файл perllocal.pod обновляется стандартным процессом установки MakeMaker.)

Модули расширения

Модули расширения написаны на C (или сочетании Perl и C). Они обычно динамически загружаются в Perl по мере необходимости, но также могут быть статически связаны. Поддерживаемые модули расширения включают Socket, Fcntl и POSIX.

Многие популярные модули расширения на C не входят в стандартный комплект (по крайней мере, не полностью) из-за их размера, изменчивости или просто отсутствия времени для надлежащего тестирования и настройки на множестве платформ, на которых Perl проходил бета-тестирование. Рекомендуется искать их на CPAN (описано ниже) или с помощью поисковых систем в интернете, таких как Google или DuckDuckGo.

CPAN

CPAN расшифровывается как Comprehensive Perl Archive Network; это глобально реплицированный архив Perl-материалов, включая документацию, руководства по стилю, советы и ловушки, альтернативные порты для систем, не являющихся Unix, и время от времени бинарные дистрибутивы для них. Поисковые системы для CPAN можно найти на http://www.cpan.org/

Самое главное, CPAN включает около тысячи не входящих в комплект модулей, некоторые из которых требуют компилятора C для сборки. Основные категории модулей:

  • Расширения языка и инструменты документации

  • Поддержка разработки

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

  • Сети, управление устройствами (модемами) и межпроцессное взаимодействие

  • Типы данных и утилиты для работы с типами данных

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

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

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

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

  • Обработка строк, обработка текстов языка, парсинг и поиск

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

  • Международная поддержка и локаль

  • Аутентификация, безопасность и шифрование

  • Всемирная паутина, HTML, HTTP, CGI, MIME

  • Утилиты для серверов и демонов

  • Архивирование и сжатие

  • Обработка изображений, растровых и битовых изображений, рисование и построение графиков

  • Почта и новостные группы Usenet

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

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

  • Разнообразные модули

Следующий список зарегистрированных сайтов CPAN. Обратите внимание, что порядок сортировки — по алфавиту полей:

Континент | |-->Страна | |-->[штат/провинция] | |-->ftp | |-->[http]

и поэтому североамериканские серверы оказываются расположены между европейскими и южноамериканскими сайтами.

Зарегистрированные сайты CPAN

Африка

Южная Африка
http://mirror.is.co.za/pub/cpan/
ftp://ftp.is.co.za/pub/cpan/
http://cpan.mirror.ac.za/
ftp://cpan.mirror.ac.za/
http://cpan.saix.net/
ftp://ftp.saix.net/pub/CPAN/
http://ftp.wa.co.za/pub/CPAN/
ftp://ftp.wa.co.za/pub/CPAN/
Уганда
http://mirror.ucu.ac.ug/cpan/
Зимбабве
http://mirror.zol.co.zw/CPAN/
ftp://mirror.zol.co.zw/CPAN/

Азия

Бангладеш
http://mirror.dhakacom.com/CPAN/
ftp://mirror.dhakacom.com/CPAN/
Китай
http://cpan.communilink.net/
http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
http://mirrors.hust.edu.cn/CPAN/
http://mirrors.neusoft.edu.cn/cpan/
http://mirror.lzu.edu.cn/CPAN/
http://mirrors.163.com/cpan/
http://mirrors.sohu.com/CPAN/
http://mirrors.ustc.edu.cn/CPAN/
ftp://mirrors.ustc.edu.cn/CPAN/
http://mirrors.xmu.edu.cn/CPAN/
ftp://mirrors.xmu.edu.cn/CPAN/
http://mirrors.zju.edu.cn/CPAN/
Индия
http://cpan.excellmedia.net/
http://perlmirror.indialinks.com/
Индонезия
http://kambing.ui.ac.id/cpan/
http://cpan.pesat.net.id/
http://mirror.poliwangi.ac.id/CPAN/
http://kartolo.sby.datautama.net.id/CPAN/
http://mirror.wanxp.id/cpan/
Иран
http://mirror.yazd.ac.ir/cpan/
Израиль
http://biocourse.weizmann.ac.il/CPAN/
Япония
http://ftp.jaist.ac.jp/pub/CPAN/
ftp://ftp.jaist.ac.jp/pub/CPAN/
http://mirror.jre655.com/CPAN/
ftp://mirror.jre655.com/CPAN/
ftp://ftp.kddilabs.jp/CPAN/
http://ftp.nara.wide.ad.jp/pub/CPAN/
ftp://ftp.nara.wide.ad.jp/pub/CPAN/
http://ftp.riken.jp/lang/CPAN/
ftp://ftp.riken.jp/lang/CPAN/
ftp://ftp.u-aizu.ac.jp/pub/CPAN/
http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
Казахстан
http://mirror.neolabs.kz/CPAN/
ftp://mirror.neolabs.kz/CPAN/
Филиппины
http://mirror.pregi.net/CPAN/
ftp://mirror.pregi.net/CPAN/
http://mirror.rise.ph/cpan/
ftp://mirror.rise.ph/cpan/
Катар
http://mirror.qnren.qa/CPAN/
ftp://mirror.qnren.qa/CPAN/
Республика Корея
http://cpan.mirror.cdnetworks.com/
ftp://cpan.mirror.cdnetworks.com/CPAN/
http://ftp.kaist.ac.kr/pub/CPAN/
ftp://ftp.kaist.ac.kr/CPAN/
http://ftp.kr.freebsd.org/pub/CPAN/
ftp://ftp.kr.freebsd.org/pub/CPAN/
http://mirror.navercorp.com/CPAN/
http://ftp.neowiz.com/CPAN/
ftp://ftp.neowiz.com/CPAN/
Сингапур
http://cpan.mirror.choon.net/
http://mirror.0x.sg/CPAN/
ftp://mirror.0x.sg/CPAN/
Тайвань
http://cpan.cdpa.nsysu.edu.tw/Unix/Lang/CPAN/
ftp://cpan.cdpa.nsysu.edu.tw/Unix/Lang/CPAN/
http://cpan.stu.edu.tw/
ftp://ftp.stu.edu.tw/CPAN/
http://ftp.yzu.edu.tw/CPAN/
ftp://ftp.yzu.edu.tw/CPAN/
http://cpan.nctu.edu.tw/
ftp://cpan.nctu.edu.tw/
http://ftp.ubuntu-tw.org/mirror/CPAN/
ftp://ftp.ubuntu-tw.org/mirror/CPAN/
Турция
http://cpan.ulak.net.tr/
ftp://ftp.ulak.net.tr/pub/perl/CPAN/
http://mirror.vit.com.tr/mirror/CPAN/
ftp://mirror.vit.com.tr/CPAN/
Вьетнам
http://mirrors.digipower.vn/CPAN/
http://mirror.downloadvn.com/cpan/
http://mirrors.vinahost.vn/CPAN/

Европа

Австрия
http://cpan.inode.at/
ftp://cpan.inode.at/
http://mirror.easyname.at/cpan/
ftp://mirror.easyname.at/cpan/
http://gd.tuwien.ac.at/languages/perl/CPAN/
ftp://gd.tuwien.ac.at/pub/CPAN/
Беларусь
http://ftp.byfly.by/pub/CPAN/
ftp://ftp.byfly.by/pub/CPAN/
http://mirror.datacenter.by/pub/CPAN/
ftp://mirror.datacenter.by/pub/CPAN/
Бельгия
http://ftp.belnet.be/ftp.cpan.org/
ftp://ftp.belnet.be/mirror/ftp.cpan.org/
http://cpan.cu.be/
http://lib.ugent.be/CPAN/
http://cpan.weepeetelecom.be/
Босния и Герцеговина
http://cpan.mirror.ba/
ftp://ftp.mirror.ba/CPAN/
Болгария
http://mirrors.neterra.net/CPAN/
ftp://mirrors.neterra.net/CPAN/
http://mirrors.netix.net/CPAN/
ftp://mirrors.netix.net/CPAN/
Хорватия
http://ftp.carnet.hr/pub/CPAN/
ftp://ftp.carnet.hr/pub/CPAN/
Чехия
http://mirror.dkm.cz/cpan/
ftp://mirror.dkm.cz/cpan/
ftp://ftp.fi.muni.cz/pub/CPAN/
http://mirrors.nic.cz/CPAN/
ftp://mirrors.nic.cz/pub/CPAN/
http://cpan.mirror.vutbr.cz/
ftp://mirror.vutbr.cz/cpan/
Дания
http://www.cpan.dk/
http://mirrors.dotsrc.org/cpan/
ftp://mirrors.dotsrc.org/cpan/
Финляндия
ftp://ftp.funet.fi/pub/languages/perl/CPAN/
Франция
http://ftp.ciril.fr/pub/cpan/
ftp://ftp.ciril.fr/pub/cpan/
http://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/
ftp://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/
http://ftp.lip6.fr/pub/perl/CPAN/
ftp://ftp.lip6.fr/pub/perl/CPAN/
http://mirror.ibcp.fr/pub/CPAN/
ftp://ftp.oleane.net/pub/CPAN/
http://cpan.mirrors.ovh.net/ftp.cpan.org/
ftp://cpan.mirrors.ovh.net/ftp.cpan.org/
http://cpan.enstimac.fr/
Германия
http://mirror.23media.de/cpan/
ftp://mirror.23media.de/cpan/
http://artfiles.org/cpan.org/
ftp://artfiles.org/cpan.org/
http://mirror.bibleonline.ru/cpan/
http://mirror.checkdomain.de/CPAN/
ftp://mirror.checkdomain.de/CPAN/
http://cpan.noris.de/
http://mirror.de.leaseweb.net/CPAN/
ftp://mirror.de.leaseweb.net/CPAN/
http://cpan.mirror.euserv.net/
ftp://mirror.euserv.net/cpan/
http://ftp-stud.hs-esslingen.de/pub/Mirrors/CPAN/
ftp://mirror.fraunhofer.de/CPAN/
ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
http://ftp.hosteurope.de/pub/CPAN/
ftp://ftp.hosteurope.de/pub/CPAN/
ftp://ftp.fu-berlin.de/unix/languages/perl/
http://ftp.gwdg.de/pub/languages/perl/CPAN/
ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
http://ftp.hawo.stw.uni-erlangen.de/CPAN/
ftp://ftp.hawo.stw.uni-erlangen.de/CPAN/
http://cpan.mirror.iphh.net/
ftp://cpan.mirror.iphh.net/pub/CPAN/
ftp://ftp.mpi-inf.mpg.de/pub/perl/CPAN/
http://cpan.netbet.org/
http://mirror.netcologne.de/cpan/
ftp://mirror.netcologne.de/cpan/
ftp://mirror.petamem.com/CPAN/
http://www.planet-elektronik.de/CPAN/
http://ftp.halifax.rwth-aachen.de/cpan/
ftp://ftp.halifax.rwth-aachen.de/cpan/
http://mirror.softaculous.com/cpan/
http://ftp.u-tx.net/CPAN/
ftp://ftp.u-tx.net/CPAN/
http://mirror.reismil.ch/CPAN/
Греция
http://cpan.cc.uoc.gr/mirrors/CPAN/
ftp://ftp.cc.uoc.gr/mirrors/CPAN/
http://ftp.ntua.gr/pub/lang/perl/
ftp://ftp.ntua.gr/pub/lang/perl/
Венгрия
http://mirror.met.hu/CPAN/
Ирландия
http://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN/
ftp://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN/
Италия
http://bo.mirror.garr.it/mirrors/CPAN/
ftp://ftp.eutelia.it/CPAN_Mirror/
http://cpan.panu.it/
ftp://ftp.panu.it/pub/mirrors/perl/CPAN/
http://cpan.muzzy.it/
Латвия
http://kvin.lv/pub/CPAN/
Литва
http://ftp.litnet.lt/pub/CPAN/
ftp://ftp.litnet.lt/pub/CPAN/
Молдова
http://mirror.as43289.net/pub/CPAN/
ftp://mirror.as43289.net/pub/CPAN/
Нидерланды
http://cpan.cs.uu.nl/
ftp://ftp.cs.uu.nl/pub/CPAN/
http://mirror.nl.leaseweb.net/CPAN/
ftp://mirror.nl.leaseweb.net/CPAN/
http://ftp.nluug.nl/languages/perl/CPAN/
ftp://ftp.nluug.nl/pub/languages/perl/CPAN/
http://mirror.transip.net/CPAN/
ftp://mirror.transip.net/CPAN/
http://cpan.mirror.triple-it.nl/
http://ftp.tudelft.nl/cpan/
ftp://ftp.tudelft.nl/pub/CPAN/
ftp://download.xs4all.nl/pub/mirror/CPAN/
Норвегия
http://cpan.uib.no/
ftp://cpan.uib.no/pub/CPAN/
ftp://ftp.uninett.no/pub/languages/perl/CPAN/
http://cpan.vianett.no/
Польша
http://ftp.agh.edu.pl/CPAN/
ftp://ftp.agh.edu.pl/CPAN/
http://ftp.piotrkosoft.net/pub/mirrors/CPAN/
ftp://ftp.piotrkosoft.net/pub/mirrors/CPAN/
ftp://ftp.ps.pl/pub/CPAN/
http://sunsite.icm.edu.pl/pub/CPAN/
ftp://sunsite.icm.edu.pl/pub/CPAN/
Португалия
http://cpan.dcc.fc.up.pt/
http://mirrors.fe.up.pt/pub/CPAN/
http://cpan.perl-hackers.net/
http://cpan.perl.pt/
Румыния
http://mirrors.hostingromania.ro/cpan.org/
ftp://ftp.lug.ro/CPAN/
http://mirrors.m247.ro/CPAN/
http://mirrors.evowise.com/CPAN/
http://mirrors.teentelecom.net/CPAN/
ftp://mirrors.teentelecom.net/CPAN/
http://mirrors.xservers.ro/CPAN/
Российская Федерация
ftp://ftp.aha.ru/CPAN/
http://cpan.rinet.ru/
ftp://cpan.rinet.ru/pub/mirror/CPAN/
http://cpan-mirror.rbc.ru/pub/CPAN/
http://mirror.rol.ru/CPAN/
http://cpan.uni-altai.ru/
http://cpan.webdesk.ru/
ftp://cpan.webdesk.ru/cpan/
http://mirror.yandex.ru/mirrors/cpan/
ftp://mirror.yandex.ru/mirrors/cpan/
Сербия
http://mirror.sbb.rs/CPAN/
ftp://mirror.sbb.rs/CPAN/
Словакия
http://cpan.lnx.sk/
http://tux.rainside.sk/CPAN/
ftp://tux.rainside.sk/CPAN/
Словения
http://ftp.arnes.si/software/perl/CPAN/
ftp://ftp.arnes.si/software/perl/CPAN/
Испания
http://mirrors.evowise.com/CPAN/
http://osl.ugr.es/CPAN/
http://ftp.rediris.es/mirror/CPAN/
ftp://ftp.rediris.es/mirror/CPAN/
Швеция
http://ftp.acc.umu.se/mirror/CPAN/
ftp://ftp.acc.umu.se/mirror/CPAN/
Швейцария
http://www.pirbot.com/mirrors/cpan/
http://mirror.switch.ch/ftp/mirror/CPAN/
ftp://mirror.switch.ch/mirror/CPAN/
Украина
http://cpan.ip-connect.vn.ua/
ftp://cpan.ip-connect.vn.ua/mirror/cpan/
Соединенное Королевство
http://cpan.mirror.anlx.net/
ftp://ftp.mirror.anlx.net/CPAN/
http://mirror.bytemark.co.uk/CPAN/
ftp://mirror.bytemark.co.uk/CPAN/
http://mirrors.coreix.net/CPAN/
http://cpan.etla.org/
ftp://cpan.etla.org/pub/CPAN/
http://cpan.cpantesters.org/
http://mirror.sax.uk.as61049.net/CPAN/
http://mirror.sov.uk.goscomb.net/CPAN/
http://www.mirrorservice.org/sites/cpan.perl.org/CPAN/
ftp://ftp.mirrorservice.org/sites/cpan.perl.org/CPAN/
http://mirror.ox.ac.uk/sites/www.cpan.org/
ftp://mirror.ox.ac.uk/sites/www.cpan.org/
http://ftp.ticklers.org/pub/CPAN/
ftp://ftp.ticklers.org/pub/CPAN/
http://cpan.mirrors.uk2.net/
ftp://mirrors.uk2.net/pub/CPAN/
http://mirror.ukhost4u.com/CPAN/

Северная Америка

Канада
http://CPAN.mirror.rafal.ca/
ftp://CPAN.mirror.rafal.ca/pub/CPAN/
http://mirror.csclub.uwaterloo.ca/CPAN/
ftp://mirror.csclub.uwaterloo.ca/CPAN/
http://mirrors.gossamer-threads.com/CPAN/
http://mirror.its.dal.ca/cpan/
ftp://mirror.its.dal.ca/cpan/
ftp://ftp.ottix.net/pub/CPAN/
Коста-Рика
http://mirrors.ucr.ac.cr/CPAN/
Мексика
http://www.msg.com.mx/CPAN/
ftp://ftp.msg.com.mx/pub/CPAN/
Соединенные Штаты
Алабама
http://mirror.teklinks.com/CPAN/
Аризона
http://mirror.n5tech.com/CPAN/
http://mirrors.namecheap.com/CPAN/
ftp://mirrors.namecheap.com/CPAN/
Калифорния
http://cpan.develooper.com/
http://httpupdate127.cpanel.net/CPAN/
http://mirrors.sonic.net/cpan/
ftp://mirrors.sonic.net/cpan/
http://www.perl.com/CPAN/
http://cpan.yimg.com/
Айдахо
http://mirrors.syringanetworks.net/CPAN/
ftp://mirrors.syringanetworks.net/CPAN/
Иллинойс
http://cpan.mirrors.hoobly.com/
http://mirror.team-cymru.org/CPAN/
ftp://mirror.team-cymru.org/CPAN/
Индиана
http://cpan.netnitco.net/
ftp://cpan.netnitco.net/pub/mirrors/CPAN/
ftp://ftp.uwsg.iu.edu/pub/perl/CPAN/
Канзас
http://mirrors.concertpass.com/cpan/
Массачусетс
http://mirrors.ccs.neu.edu/CPAN/
Мичиган
http://cpan.cse.msu.edu/
ftp://cpan.cse.msu.edu/
http://httpupdate118.cpanel.net/CPAN/
http://mirrors-usa.go-parts.com/cpan/
http://ftp.wayne.edu/CPAN/
ftp://ftp.wayne.edu/CPAN/
Нью-Гэмпшир
http://mirror.metrocast.net/cpan/
Нью-Джерси
http://mirror.datapipe.net/CPAN/
ftp://mirror.datapipe.net/pub/CPAN/
http://www.hoovism.com/CPAN/
ftp://ftp.hoovism.com/CPAN/
http://cpan.mirror.nac.net/
Нью-Йорк
http://mirror.cc.columbia.edu/pub/software/cpan/
ftp://mirror.cc.columbia.edu/pub/software/cpan/
http://cpan.belfry.net/
http://cpan.erlbaum.net/
ftp://cpan.erlbaum.net/CPAN/
http://cpan.hexten.net/
ftp://cpan.hexten.net/
http://mirror.nyi.net/CPAN/
ftp://mirror.nyi.net/pub/CPAN/
http://noodle.portalus.net/CPAN/
ftp://noodle.portalus.net/CPAN/
http://mirrors.rit.edu/CPAN/
ftp://mirrors.rit.edu/CPAN/
Северная Каролина
http://httpupdate140.cpanel.net/CPAN/
http://mirrors.ibiblio.org/CPAN/
Орегон
http://ftp.osuosl.org/pub/CPAN/
ftp://ftp.osuosl.org/pub/CPAN/
http://mirror.uoregon.edu/CPAN/
Пенсильвания
http://cpan.pair.com/
ftp://cpan.pair.com/pub/CPAN/
http://cpan.mirrors.ionfish.org/
Южная Каролина
http://cpan.mirror.clemson.edu/
Техас
http://mirror.uta.edu/CPAN/
Юта
http://cpan.cs.utah.edu/
ftp://cpan.cs.utah.edu/CPAN/
ftp://mirror.xmission.com/CPAN/
Вирджиния
http://mirror.cogentco.com/pub/CPAN/
ftp://mirror.cogentco.com/pub/CPAN/
http://mirror.jmu.edu/pub/CPAN/
ftp://mirror.jmu.edu/pub/CPAN/
http://mirror.us.leaseweb.net/CPAN/
ftp://mirror.us.leaseweb.net/CPAN/
Вашингтон
http://cpan.llarian.net/
ftp://cpan.llarian.net/pub/CPAN/
Висконсин
http://cpan.mirrors.tds.net/
ftp://cpan.mirrors.tds.net/pub/CPAN/

Океания

Австралия
http://mirror.as24220.net/pub/cpan/
ftp://mirror.as24220.net/pub/cpan/
http://cpan.mirrors.ilisys.com.au/
http://cpan.mirror.digitalpacific.com.au/
ftp://mirror.internode.on.net/pub/cpan/
http://mirror.optusnet.com.au/CPAN/
http://cpan.mirror.serversaustralia.com.au/
http://cpan.uberglobalmirror.com/
http://mirror.waia.asn.au/pub/cpan/
Новая Каледония
http://cpan.lagoon.nc/pub/CPAN/
ftp://cpan.lagoon.nc/pub/CPAN/
http://cpan.nautile.nc/CPAN/
ftp://cpan.nautile.nc/CPAN/
Новая Зеландия
ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
http://cpan.catalyst.net.nz/CPAN/
ftp://cpan.catalyst.net.nz/pub/CPAN/
http://cpan.inspire.net.nz/
ftp://cpan.inspire.net.nz/cpan/
http://mirror.webtastix.net/CPAN/
ftp://mirror.webtastix.net/CPAN/

Южная Америка

Аргентина
http://cpan.mmgdesigns.com.ar/
Бразилия
http://cpan.kinghost.net/
http://linorg.usp.br/CPAN/
http://mirror.nbtelecom.com.br/CPAN/
Чили
http://cpan.dcc.uchile.cl/
ftp://cpan.dcc.uchile.cl/pub/lang/cpan/

Зеркала RSYNC

rsync://ftp.is.co.za/IS-Mirror/ftp.cpan.org/
rsync://mirror.ac.za/CPAN/
rsync://mirror.zol.co.zw/CPAN/
rsync://mirror.dhakacom.com/CPAN/
rsync://mirrors.ustc.edu.cn/CPAN/
rsync://mirrors.xmu.edu.cn/CPAN/
rsync://kambing.ui.ac.id/CPAN/
rsync://ftp.jaist.ac.jp/pub/CPAN/
rsync://mirror.jre655.com/CPAN/
rsync://ftp.kddilabs.jp/cpan/
rsync://ftp.nara.wide.ad.jp/cpan/
rsync://ftp.riken.jp/cpan/
rsync://mirror.neolabs.kz/CPAN/
rsync://mirror.qnren.qa/CPAN/
rsync://ftp.neowiz.com/CPAN/
rsync://mirror.0x.sg/CPAN/
rsync://ftp.yzu.edu.tw/pub/CPAN/
rsync://ftp.ubuntu-tw.org/CPAN/
rsync://mirrors.digipower.vn/CPAN/
rsync://cpan.inode.at/CPAN/
rsync://ftp.byfly.by/CPAN/
rsync://mirror.datacenter.by/CPAN/
rsync://ftp.belnet.be/cpan/
rsync://cpan.mirror.ba/CPAN/
rsync://mirrors.neterra.net/CPAN/
rsync://mirrors.netix.net/CPAN/
rsync://mirror.dkm.cz/cpan/
rsync://mirrors.nic.cz/CPAN/
rsync://cpan.mirror.vutbr.cz/cpan/
rsync://rsync.nic.funet.fi/CPAN/
rsync://ftp.ciril.fr/pub/cpan/
rsync://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/
rsync://cpan.mirrors.ovh.net/CPAN/
rsync://mirror.de.leaseweb.net/CPAN/
rsync://mirror.euserv.net/cpan/
rsync://ftp-stud.hs-esslingen.de/CPAN/
rsync://ftp.gwdg.de/pub/languages/perl/CPAN/
rsync://ftp.hawo.stw.uni-erlangen.de/CPAN/
rsync://cpan.mirror.iphh.net/CPAN/
rsync://mirror.netcologne.de/cpan/
rsync://ftp.halifax.rwth-aachen.de/cpan/
rsync://ftp.ntua.gr/CPAN/
rsync://mirror.met.hu/CPAN/
rsync://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN/
rsync://rsync.panu.it/CPAN/
rsync://mirror.as43289.net/CPAN/
rsync://rsync.cs.uu.nl/CPAN/
rsync://mirror.nl.leaseweb.net/CPAN/
rsync://ftp.nluug.nl/CPAN/
rsync://mirror.transip.net/CPAN/
rsync://cpan.uib.no/cpan/
rsync://cpan.vianett.no/CPAN/
rsync://cpan.perl-hackers.net/CPAN/
rsync://cpan.perl.pt/cpan/
rsync://mirrors.m247.ro/CPAN/
rsync://mirrors.teentelecom.net/CPAN/
rsync://cpan.webdesk.ru/CPAN/
rsync://mirror.yandex.ru/mirrors/cpan/
rsync://mirror.sbb.rs/CPAN/
rsync://ftp.acc.umu.se/mirror/CPAN/
rsync://rsync.pirbot.com/ftp/cpan/
rsync://cpan.ip-connect.vn.ua/CPAN/
rsync://rsync.mirror.anlx.net/CPAN/
rsync://mirror.bytemark.co.uk/CPAN/
rsync://mirror.sax.uk.as61049.net/CPAN/
rsync://rsync.mirrorservice.org/cpan.perl.org/CPAN/
rsync://ftp.ticklers.org/CPAN/
rsync://mirrors.uk2.net/CPAN/
rsync://CPAN.mirror.rafal.ca/CPAN/
rsync://mirror.csclub.uwaterloo.ca/CPAN/
rsync://mirrors.namecheap.com/CPAN/
rsync://mirrors.syringanetworks.net/CPAN/
rsync://mirror.team-cymru.org/CPAN/
rsync://debian.cse.msu.edu/cpan/
rsync://mirrors-usa.go-parts.com/mirrors/cpan/
rsync://rsync.hoovism.com/CPAN/
rsync://mirror.cc.columbia.edu/cpan/
rsync://noodle.portalus.net/CPAN/
rsync://mirrors.rit.edu/cpan/
rsync://mirrors.ibiblio.org/CPAN/
rsync://cpan.pair.com/CPAN/
rsync://cpan.cs.utah.edu/CPAN/
rsync://mirror.cogentco.com/CPAN/
rsync://mirror.jmu.edu/CPAN/
rsync://mirror.us.leaseweb.net/CPAN/
rsync://cpan.mirror.digitalpacific.com.au/cpan/
rsync://mirror.internode.on.net/cpan/
rsync://uberglobalmirror.com/cpan/
rsync://cpan.lagoon.nc/cpan/
rsync://mirrors.mmgdesigns.com.ar/CPAN/

Для получения актуального списка сайтов CPAN, см. http://www.cpan.org/SITES или ftp://www.cpan.org/SITES.

Модули: Создание, использование и злоупотребление

(Следующий раздел взят непосредственно из файла модулей Тима Бэнса, доступного на вашем ближайшем сайте CPAN.)

Perl реализует класс с использованием пакета, но наличие пакета не подразумевает наличия класса. Пакет — это просто пространство имен. Класс — это пакет, предоставляющий подпрограммы, которые могут использоваться как методы. Метод — это просто подпрограмма, которая ожидает в качестве своего первого аргумента либо имя пакета (для «статических» методов), либо ссылку на что-то (для «виртуальных» методов).

Модуль — это файл, который (по соглашению) предоставляет класс с тем же именем (без .pm), плюс метод import в этом классе, который может вызываться для извлечения экспортированных символов. Этот модуль может реализовывать некоторые свои методы, загружая динамические объекты C или C++, но это должно быть полностью прозрачно для пользователя модуля. Аналогично, модуль может настроить функцию AUTOLOAD для поглощения определений подпрограмм по требованию, но и это прозрачно. Только файл .pm должен существовать. Подробности механизма AUTOLOAD см. в perlsub, perlobj и AutoLoader.

Руководство по созданию модулей

  • Существуют ли аналогичные модули в какой-либо форме?

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

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

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

    Попробуйте use warnings; (или use warnings qw(...);). Помните, что вы можете добавить no warnings qw(...); к отдельным блокам кода, которым требуется меньше предупреждений.

    Используйте освященные ссылки. Используйте двухаргументную форму bless для освящения в имя класса, указанное в качестве первого параметра конструктора, например:

    sub new {
        my $class = shift;
        return bless {}, $class;
    }

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

    sub new {
        my $self  = shift;
        my $class = ref($self) || $self;
        return bless {}, $class;
    }

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

    Избегайте проверок имени класса, таких как: die "Invalid" unless ref $ref eq 'FOO'. Обычно вы можете удалить часть eq 'FOO' без каких-либо проблем. Позвольте объектам заботиться о себе! В целом, старайтесь избегать жёстко заданных имён классов, насколько это возможно.

    Избегайте $r->Class::func() в случаях, когда использование @ISA=qw(... Class ...) и $r->func() было бы уместным.

    Используйте autosplit, чтобы малоиспользуемые или недавно добавленные функции не были бременем для программ, которые их не используют. Добавьте тестовые функции в модуль после __END__, используя AutoSplit или сказав:

    eval join('',<main::DATA>) || die $@ unless caller();

    Проходит ли ваш модуль тест «пустого подкласса»? Если вы говорите @SUBCLASS::ISA = qw(YOURCLASS);, ваши приложения должны иметь возможность использовать SUBCLASS точно так же, как YOURCLASS. Например, ваше приложение всё ещё работает, если вы измените: $obj = YOURCLASS->new(); на: $obj = SUBCLASS->new();?

    Избегайте сохранения каких-либо данных состояния в ваших пакетах. Это затрудняет использование ваших пакетов другими пакетами. Сохраняйте данные состояния в объектах.

    Всегда используйте -w.

    Попробуйте use strict; (или use strict qw(...);). Помните, что вы можете добавить no strict qw(...); к отдельным блокам кода, которым требуется меньшая строгость.

    Всегда используйте -w.

    Следуйте рекомендациям в perlstyle.

    Всегда используйте -w.

  • Некоторые простые рекомендации по стилю

    В руководстве perlstyle, поставляемом с Perl, много полезных рекомендаций.

    Стиль кодирования является делом личных предпочтений. Многие люди развивают свой стиль на протяжении многих лет, изучая, что помогает им писать и поддерживать качественный код. Вот несколько общих рекомендаций, которые, как правило, используются опытными разработчиками:

    Используйте подчеркивания для разделения слов. Как правило, $var_names_like_this легче читать, чем $VarNamesLikeThis, особенно для тех, кто не является носителем английского языка. Это также простое правило, которое последовательно работает с VAR_NAMES_LIKE_THIS.

    Имена пакетов/модулей являются исключением из этого правила. Perl неформально зарезервировал имена модулей в нижнем регистре для «pragma» модулей, таких как integer и strict. Другие модули, как правило, начинаются с большой буквы и используют смешанный регистр без подчеркиваний (они должны быть короткими и переносимыми).

    Возможно, вам будет полезно использовать регистр букв для указания области или характера переменной. Например:

    $ALL_CAPS_HERE   constants only (beware clashes with Perl vars)
    $Some_Caps_Here  package-wide global/static
    $no_caps_here    function scope my() or local() variables

    Имена функций и методов, как правило, работают лучше в нижнем регистре. Например, $obj->as_string().

    Вы можете использовать ведущую подчеркивание, чтобы указать, что переменная или функция не должны использоваться за пределами пакета, который её определил.

  • Выбор того, что экспортировать.

    НЕ экспортируйте имена методов!

    НЕ экспортируйте ничего по умолчанию без веской причины!

    Экспорт загрязняет пространство имён пользователя модуля. Если вам необходимо экспортировать, постарайтесь использовать @EXPORT_OK вместо @EXPORT и избегайте коротких или общих имён, чтобы уменьшить риск конфликтов имён.

    Как правило, всё, что не экспортировано, всё ещё доступно извне модуля с использованием синтаксиса ModuleName::item_name (или $blessed_ref->method). По соглашению, вы можете использовать ведущую подчеркивание в именах, чтобы неформально указать, что они являются «внутренними» и не предназначены для общего доступа.

    (На самом деле, получить закрытые функции можно, сказав: my $subref = sub { ... }; &$subref;. Но вызвать это напрямую как метод невозможно, так как метод должен иметь имя в таблице символов.)

    Как общее правило, если модуль пытается быть объектно-ориентированным, ничего не экспортируйте. Если это просто набор функций, то @EXPORT_OK всё, кроме этого, но используйте @EXPORT с осторожностью.

  • Выбор имени для модуля.

    Это имя должно быть максимально описательным, точным и полным. Избегайте любых рисков неоднозначности. Всегда старайтесь использовать два или более полных слова. В целом, имя должно отражать то, что особенного делает модуль, а не то, как он это делает. Используйте вложенные имена модулей для неформальной группировки или категоризации модуля. Должна быть очень веская причина для того, чтобы модуль не имел вложенного имени. Имена модулей должны начинаться с большой буквы.

    Наличие 57 модулей, все называемых Sort, не упростит жизнь никому (хотя 23, называемых Sort::Quick, немного лучше :-). Представьте себе, как кто-то пытается установить ваш модуль вместе со многими другими.

    Если вы разрабатываете набор связанных модулей/классов, хорошей практикой является использование вложенных классов с общим префиксом, так как это поможет избежать конфликтов имён. Например: Xyz::Control, Xyz::View, Xyz::Model и т. д. Используйте эти модули как руководство по именованию.

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

    Если вы разрабатываете модули для частного внутреннего или проекта, которые никогда не будут выпущены для публичного доступа, убедитесь, что их имена не будут конфликтовать с будущими общедоступными модулями. Вы можете сделать это, используя зарезервированную категорию Local::* или используя имя категории, включающее символ подчеркивания, например, Foo_Corp::*.

    Для обеспечения переносимости каждый компонент имени модуля должен быть ограничен 11 символами. Если он может использоваться в MS-DOS, то постарайтесь убедиться, что каждый из них уникален в первых 8 символах. Вложенные модули облегчают это.

    Для получения дополнительной информации по именованию модулей обратитесь к:

    http://pause.perl.org/pause/query?ACTION=pause_namingmodules

    или отправьте сообщение на список рассылки <module-authors@perl.org>.

  • Вы всё сделали правильно?

    Как вы знаете, что приняли правильные решения? Вы выбрали дизайн интерфейса, который позже вызовет проблемы? Вы выбрали наиболее подходящее имя? У вас есть какие-либо вопросы?

    Лучший способ узнать наверняка и получить много полезных советов – спросить у знающего человека. Список рассылки <module-authors@perl.org> пригодится для этого; к нему также можно получить доступ через новостной интерфейс perl.module-authors at nntp.perl.org.

    Всё, что вам нужно сделать, – это кратко описать модуль, его назначение и интерфейсы. Несколько строк о каждом из основных методов, вероятно, достаточно. (Если вы отправите весь модуль, то он, возможно, будет проигнорирован занятыми людьми – как правило, именно теми людьми, которым вы хотите его показать!)

    Не беспокойтесь о публикации, если вы не можете сказать, когда модуль будет готов – просто укажите об этом в сообщении. Возможно, стоит пригласить других помочь вам; они могут справиться с этим за вас!

  • README и другие дополнительные файлы.

    Известно, что разработчики программного обеспечения обычно полностью документируют разработанное ими программное обеспечение. Однако, если миру срочно необходимо ваше программное обеспечение, и нет достаточно времени для написания полной документации, пожалуйста, хотя бы предоставьте файл README, содержащий:

    • Описание модуля/пакета/расширения и т. д.

    • Уведомление об авторских правах – см. ниже.

    • Предварительные требования – что ещё вам может понадобиться.

    • Как его собрать – возможные изменения в Makefile.PL и т. д.

    • Как его установить.

    • Последние изменения в этом выпуске, особенно несовместимости

    • Изменения/улучшения, которые вы планируете внести в будущем.

    Если файл README кажется слишком большим, вы можете разбить некоторые разделы на отдельные файлы: INSTALL, Copying, ToDo и т. д.

    • Добавление уведомления об авторских правах.

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

      Например, Perl поставляется с двумя типами лицензий: GNU GPL и Artistic Licence (см. файлы README, Copying и Artistic, или perlgpl и perlartistic). У Ларри есть веские причины, почему он НЕ использует только GNU GPL.

      Моя личная рекомендация, из уважения к Ларри, Perl и всему сообществу Perl в целом, – это простое заявление, например:

      Copyright (c) 1995 Your Name. All rights reserved.
      This program is free software; you can redistribute it and/or
      modify it under the same terms as Perl itself.

      Это заявление должно, по крайней мере, появиться в файле README. Вы также можете включить его в файл Copying и в файлы исходного кода. Помните, что нужно включить и другие слова в дополнение к авторским правам.

    • Назначение версии/номер проблемы/выпуска модулю.

      Для полной совместимости с модулями Exporter и MakeMaker вы должны сохранить номер версии модуля в переменной, не являющейся моим пакетом, под названием $VERSION. Это должно быть положительное число с плавающей запятой с, по крайней мере, двумя цифрами после десятичной точки (т. е., сотыми, например, $VERSION = "0.01"). Не используйте версию в формате «1.3.2». Подробности см. в Exporter.

      Может быть полезно добавить функцию или метод для получения числа. Используйте это число в объявлениях и именах файлов архива при выпуске модуля (ModuleName-1.02.tar.Z). См. perldoc ExtUtils::MakeMaker.pm для получения дополнительной информации.

    • Как выпустить и распространить модуль.

      Если это возможно, зарегистрируйте модуль в CPAN. Следуйте инструкциям и ссылкам на:

      http://www.cpan.org/modules/04pause.html

      и загрузите его на:

      http://pause.perl.org/

      и сообщите <modules@perl.org>. Это позволит любому установить ваш модуль с помощью инструмента cpan, поставляемого с Perl.

      Используя веб-интерфейс, вы можете попросить сервер загрузки зеркалировать ваши модули со вашего FTP- или веб-сайта в свой каталог в CPAN!

    • Обращайте внимание при изменении выпущенного модуля.

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

Рекомендации по преобразованию скриптов библиотеки Perl 4 в модули

  • Нет необходимости в преобразовании чего-либо.

    Если оно не сломано, не надо его чинить! Скрипты Perl 4 библиотеки должны продолжать работать без проблем. Возможно, потребуется внести некоторые незначительные изменения (например, экранирование не-массивов @ в строках с двойными кавычками), но нет необходимости преобразовывать файл .pl в модуль только для этого.

  • Рассмотрите последствия.

    Все приложения Perl, которые используют этот скрипт, необходимо будет изменить (незначительно), если скрипт преобразуется в модуль. Стоит ли это делать, если вы не планируете внести другие изменения одновременно?

  • Максимально используйте эту возможность.

    Если вы собираетесь преобразовать скрипт в модуль, вы можете использовать эту возможность для перепроектирования интерфейса. Руководящие принципы создания модулей выше включают в себя многие вопросы, которые следует учитывать.

  • Утилита pl2pm поможет вам начать работу.

    Эта утилита будет читать файлы *.pl (переданные в качестве параметров) и записывать соответствующие файлы *.pm. Утилита pl2pm выполняет следующие действия:

    • Добавляет стандартные строки пролога модуля

    • Преобразует спецификаторы пакетов из ' в ::

    • Преобразует die(...) в croak(...)

    • Несколько других незначительных изменений

    Будучи механическим процессом, pl2pm не является абсолютно надёжным. Преобразованный код необходимо тщательно проверить, особенно все инструкции о пакетах. Не удаляйте исходный файл .pl, пока новый .pm не будет работать!

Руководящие принципы повторного использования кода приложения

  • Полностью работоспособные приложения редко подходят для Perl Module Library.

  • Многие приложения содержат некоторые фрагменты кода Perl, которые можно повторно использовать.

    Помогите спасти мир! Поделитесь своим кодом в форме, которая упростит его повторное использование.

  • Выделите повторно используемый код в один или несколько отдельных файлов модулей.

  • Используйте эту возможность, чтобы пересмотреть и перепроектировать интерфейсы.

  • В некоторых случаях «приложение» можно уменьшить до небольшой

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

         % perl -e 'use Module::Name; method(@ARGV)' ...
    or
         % perl -mModule::Name ...    (in perl5.002 or higher)

ПРИМЕЧАНИЕ

Perl не навязывает частные и публичные части своих модулей, как вы могли быть привыкшими в других языках, таких как C++, Ada или Modula-17. Perl не имеет пристрастия к навязываемой приватности. Он предпочел бы, чтобы вы держались подальше от его гостиной, потому что вас не пригласили, а не потому, что у него есть дробовик.

Модуль и его пользователь имеют контракт, часть которого основана на обычном праве, а часть — на «письменном». Часть контракта по обычному праву заключается в том, что модуль не загрязняет ни один пространство имён, к которому он не был приглашен. Письменный контракт для модуля (также известный как документация) может содержать другие положения. Но тогда вы знаете, когда вы use RedefineTheWorld что вы переопределяете мир и готовы принять последствия.

© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.30.3/perlmodlib

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API