Spec-Zone.ru › Perl 5.28

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. Большинство из них имеют лексическое объявление, поэтому внутренний БЛОК может отменить их, сказав:

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

что действует до конца этого БЛОКА.

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

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

arybase

Установить базу индексации через $[

attributes

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

autodie

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

autodie::exception

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

autodie::exception::system

Исключения из autodying system().

autodie::hints

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

autodie::skip

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

autouse

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

base

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

bigint

Поддержка прозрачных целых чисел большой точности для Perl

bignum

Поддержка прозрачных чисел большой точности для Perl

bigrat

Поддержка прозрачных чисел и рациональных чисел большой точности для Perl

blib

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

bytes

Отобразить отдельные байты символов

charnames

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

constant

Объявить константы

deprecate

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

diagnostics

Выводить подробные диагностические сообщения об ошибках

encoding

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

encoding::warnings

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

experimental

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

feature

Включить новые функции

fields

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

filetest

Управлять операторами проверки прав доступа к файлам

if

use модуль 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::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::Debug

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

B::Deparse

Задний конец Perl-компилятора для генерации кода Perl

B::Op_private
OP op_private flag definitions
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::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/Portability

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 Format

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

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

ExtUtils::Constant

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

ExtUtils::Constant::Base

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

END_OF_DOCUMENT_MARKER
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

Независимые от платформы методы MM

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

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

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::Codes

Распределение модулей для работы с кодами локалей

Locale::Codes::Changes

Подробности изменений в Locale::Codes

Locale::Codes::Country

Модуль для работы с наборами кодов стран

Locale::Codes::Currency

Модуль для работы с наборами кодов валют

Locale::Codes::LangExt

Модуль для работы с наборами кодов langext

Locale::Codes::LangFam

Модуль для работы с наборами кодов langfam

Locale::Codes::LangVar

Модуль для работы с наборами кодов langvar

Locale::Codes::Language

Модуль для работы с наборами кодов языков

Locale::Codes::Script

Модуль для работы с наборами кодов шрифтов

Locale::Codes::Types

Типы поддерживаемых наборов данных

Locale::Country

Модуль для работы с наборами кодов стран

Locale::Currency

Модуль для работы с наборами кодов валют

Locale::Language

Модуль для работы с наборами кодов языков

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

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

Locale::Script

Модуль для работы с наборами кодов шрифтов

MIME::Base64

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

MIME::QuotedPrint

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

Math::BigFloat

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

Math::BigInt

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

Math::BigInt::Calc

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

Math::BigInt::CalcEmu

Эмулировать низкоуровневую математику с кодом 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

IO с отображением памяти

PerlIO::scalar

IO в памяти, скалярное IO

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-цветами

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 с управляющими последовательностями терминала

Pod::Perldoc::ToText

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

Pod::Perldoc::ToTk

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

Pod::Perldoc::ToXml

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

Pod::PlainText

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

Pod::Select
END_OF_DOCUMENT_MARKER

Извлечение выбранных разделов 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

Интерфейс для парсинга Pod с помощью pull-парсера

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

Форматирование 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::Termcap

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

Pod::Usage

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

SDBM_File

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

Safe

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

Scalar::Util

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

Search::Dict

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

SelectSaver

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

SelfLoader

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

Storable

Сохранение данных структур Perl

Sub::Util

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

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

Тип события Note

Test2::Event::Ok

Тип события Ok

Test2::Event::Pass

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

Test2::Event::Plan

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

Test2::Event::Skip

Тип события Skip

Test2::Event::Subtest

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

Test2::Event::TAP::Version

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

END_OF_DOCUMENT_MARKER
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::Info

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

Test2::EventFacet::Meta

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

Test2::EventFacet::Parent

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

Test2::EventFacet::Plan

Аспект для установки плана

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

Эффективное вычисление времени от локального и GMT времени

Time::Piece

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

Time::Seconds

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

Time::gmtime

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

Time::localtime

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

Time::tm

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

UNIVERSAL

Базовый класс для ВСЕХ классов (определённые ссылки)

Unicode::Collate

Алгоритм сортировки Unicode

Unicode::Collate::CJK::Big5

Взвешивание CJK объединённых иероглифов

Unicode::Collate::CJK::GB2312

Взвешивание CJK объединённых иероглифов

Unicode::Collate::CJK::JISX0208

Взвешивание JIS KANJI для Unicode::Collate

Unicode::Collate::CJK::Korean

Взвешивание CJK объединённых иероглифов

Unicode::Collate::CJK::Pinyin

Взвешивание CJK объединённых иероглифов

Unicode::Collate::CJK::Stroke

Взвешивание CJK объединённых иероглифов

Unicode::Collate::CJK::Zhuyin

Взвешивание CJK объединённых иероглифов

Unicode::Collate::Locale

Лингвистическая настройка для DUCET через Unicode::Collate

Unicode::Normalize

Нормальные формы Unicode

Unicode::UCD

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

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
Hook stack for managing scopes via %^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, но она не находит ваши модули, вам нужно будет исправить ваш manpath. Подробности см. в perl. Если у вас нет системной команды man, попробуйте программу perldoc.

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

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

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

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

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(...); к отдельным блокам кода, требующим меньше предупреждений.

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

    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().

    Используйте авторазбиение, чтобы малоиспользуемые или недавно добавленные функции не были бременем для программ, которые их не используют. Добавьте тестовые функции в модуль после __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 неформально зарезервированы имена модулей с маленькими буквами для модулей «прагмы», таких как 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 и в ваши исходные файлы. Помните, что необходимо включить и другие слова, помимо Copyright.

    • Присвойте модулю номер версии/выпуска.

      Для полной совместимости с модулями 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.

  • Многие приложения содержат некоторый код 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.28.3/perlmodlib

Spec-Zone.ru

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