Spec-Zone.ru › Perl 5.34

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_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 Meta

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

Кодировка ETSI 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 в файлах Make и т.д.

ExtUtils::Command::MM

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

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

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

ExtUtils::MM_Any

Платформенно-независимые методы MM

ExtUtils::MM_BeOS

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

ExtUtils::MM_Cygwin

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

ExtUtils::MM_DOS

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

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_OS390

Специфичный для OS390 подчиненный класс ExtUtils::MM_Unix

ExtUtils::MM_QNX

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

ExtUtils::MM_UWIN

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

ExtUtils::MM_Unix

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

ExtUtils::MM_VMS

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

ExtUtils::MM_VOS

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

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

Создание файла пакетной обработки для запуска perl-скриптов в Windows

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-глоббирования

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

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

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, zstd, xz, lzma, lzip, lzf или 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

Отключение именованных операторов при компиляции кода 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::Functions

Группировка функций Perl по аналогии с perlfunc.pod

Pod::Html

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

Pod::Man

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

Pod::ParseLink

Парсинг кода форматирования L<> в тексте POD

Pod::Perldoc

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

Pod::Perldoc::BaseTo

Базовый класс для форматировщиков Pod::Perldoc

Pod::Perldoc::GetOptsOO

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

Pod::Perldoc::ToANSI

Вывод Pod с цветовыми escape-последовательностями 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 с escape-последовательностями терминала

Pod::Perldoc::ToText

Позволяет Perldoc выводить Pod в виде простого текста

Pod::Perldoc::ToTk

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

Pod::Perldoc::ToXml

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

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

Только Pod, весь Pod и ничего, кроме Pod

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

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

Pod::Simple::Search

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

Pod::Simple::SimpleTree
END_OF_DOCUMENT_MARKER

Разбор 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-последовательностей

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

Представление списка событий.

Test2::API::InterceptResult::Event

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

Test2::API::InterceptResult::Hub

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

Test2::API::InterceptResult::Squasher

Инкапсуляция алгоритма, который

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

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

END_OF_DOCUMENT_MARKER
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

Таймеры высокого разрешения с функциями alarm, sleep, gettimeofday, интервальные таймеры

Time::Local

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

Time::Piece

Объекты времени с ориентацией на объекты

Time::Seconds

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

Time::gmtime

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

Time::localtime

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

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

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

User::pwent

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

VMS::DCLsym

Расширение Perl для управления символами DCL

VMS::Filespec

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

VMS::Stdio

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

Win32

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

Win32API::File

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

Win32CORE

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

XS::APItest

Тест API языка Perl C

XS::Typemap

Модуль для тестирования XS typemap, распространяемых с 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, но она не находит ваши модули, вам придётся исправить manpath. Подробности см. в 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 можно найти по адресу https://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 посетите https://www.cpan.org/SITES или ftp://www.cpan.org/SITES.

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

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

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

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

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

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

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

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

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

    или отправьте письмо на адрес электронной почты <module-authors@perl.org>.

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

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

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

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

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

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

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

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

    • Заявление о праве на использование авторских прав — см. ниже.

    • Требования — что еще вам может потребоваться.

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

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

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

    • Планируемые изменения/улучшения в будущем.

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

    • Добавление авторского права.

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

      Например, Perl поставляется с двумя типами лицензий: GNU GPL и Artistic License (см. файлы 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. Следуйте инструкциям и ссылкам на:

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

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

      https://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–2021 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.34.0/perlmodlib

Spec-Zone.ru

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