Spec-Zone.ru › Perl 5.32

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.

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

атрибуты

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

autodie

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

autodie::exception

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

autodie::exception::system

Исключения от автоумирающей функции 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

Управление операторами проверки файлов

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

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

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

CPAN::Meta::Prereqs

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

CPAN::Meta::Requirements

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

CPAN::Meta::Spec

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

CPAN::Meta::Validator

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

CPAN::Meta::YAML

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

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

Программный интерфейс к 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 из Perl

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

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

Encode::Guess

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

Encode::JP

Кодировки японского языка

Encode::JP::H2Z

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

Encode::JP::JIS7

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

Encode::KR

Кодировки корейского языка

Encode::KR::2022_KR

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

Encode::MIME::Header

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

Encode::MIME::Name

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

Encode::PerlIO

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

Encode::Supported

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

Encode::Symbol

Символьные кодировки

Encode::TW

Кодировки китайского языка из Тайваня

Encode::Unicode

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

Encode::Unicode::UTF7

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

English

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

Env

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

Errno

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

Exporter

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

Exporter::Heavy

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

ExtUtils::CBuilder

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

ExtUtils::CBuilder::Platform::Windows

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

ExtUtils::Command

Утилиты для замены общих UNIX-команд в файлах Make и т.п.

ExtUtils::Command::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

Подкласс 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

Ранее генерировались Makefiles для 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

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

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

Поддержка классов "Inside-Out"

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, 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

END_OF_DOCUMENT_MARKER
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

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

ODBM_File

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

Opcode

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

POSIX

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

Params::Check

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

Parse::CPAN::Meta

Разбор файлов метаданных CPAN META.yml и META.json

Perl::OSType

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

PerlIO

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

PerlIO::encoding

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

PerlIO::mmap

В памяти отображаемый ввод/вывод

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

Pod::Perldoc::ToChecker

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

Pod::Perldoc::ToMan

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

Pod::Perldoc::ToNroff

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

Pod::Perldoc::ToPod

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

Pod::Perldoc::ToRtf

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

Pod::Perldoc::ToTerm

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

Pod::Perldoc::ToText

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

Pod::Perldoc::ToTk

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

Pod::Perldoc::ToXml

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

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

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

Pod::Simple::Subclassing

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

Pod::Simple::Text

Форматирование Pod как простого текста

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

Test2::Event::V2

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

Test2::Event::Waiting

Уведомление всем процессам/потокам, что пора завершаться

Test2::EventFacet

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

Test2::EventFacet::About

Аспект с подробностями события.

Test2::EventFacet::Amnesty

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

Test2::EventFacet::Assert

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

Test2::EventFacet::Control

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

Test2::EventFacet::Error

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

Test2::EventFacet::Hub

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

Test2::EventFacet::Info

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

Test2::EventFacet::Info::Table

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

Test2::EventFacet::Meta

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

Test2::EventFacet::Parent

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

Test2::EventFacet::Plan

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

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

Таймеры с высоким разрешением, задержка, gettimeofday, интервальные таймеры

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

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

User::grent

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

User::pwent

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

VMS::DCLsym

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

VMS::Filespec

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

VMS::Stdio

Стандартные функции ввода-вывода с помощью расширений VMS

Win32

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

Win32API::File

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

Win32CORE

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

XS::APItest

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

XS::Typemap

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

XSLoader

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

autodie::Scope::Guard

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

autodie::Scope::GuardStack

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

autodie::Util

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

version::Internals

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

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

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

(Флаг -T нужен для предотвращения включения '.' в @INC.) Все они должны иметь собственную установленную документацию, доступную через вашу команду man(1). Если у вас нет программы find, вы можете использовать программу Perl find2perl, которая генерирует код Perl для запуска через perl. Если у вас есть программа man, но она не находит ваши модули, вам нужно исправить 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. Подробнее об механизме AUTOLOAD см. perlsub, perlobj и AutoLoader.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • Недавние изменения в этом выпуске, особенно несовместимости.

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

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

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

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

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

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

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

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

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

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

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

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

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

      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.

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

Spec-Zone.ru

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