Spec-Zone.ru › Perl 5.36

perlmodlib

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • БИБЛИОТЕКА МОДУЛЕЙ PERL
    • Прагматические модули
    • Стандартные модули
    • Модули расширения
  • CPAN
  • Модули: Создание, использование и злоупотребление
    • Руководства по созданию модулей
    • Руководства по преобразованию скриптов библиотек 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 переменную hints. Другие влияют на текущий пакет, например 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 с базовыми классами во время компиляции

bigfloat

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

bigint

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

bignum

Поддержка больших чисел для Perl

bigrat

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

blib

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

builtin

Импорт встроенных служебных функций

bytes

Доступ к отдельным байтам символов

charnames

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

constant

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

deprecate

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

diagnostics

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

encoding

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

encoding::warnings

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

experimental

Экспериментальные функции сделаны простыми

feature

Включение новых функций

fields

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

filetest

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

if

use модуль Perl, если выполняется условие

integer

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

less

Запрос меньшего значения

lib

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

locale

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

mro

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

ok

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

open

Установление стандартных слоёв PerlIO для ввода и вывода

ops

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

overload

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

overloading

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

parent

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

re

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

sigtrap

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

sort

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

strict

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

subs

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

threads

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

threads::shared

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

utf8

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

vars

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

version

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

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

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

Data::Dumper

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

Devel::PPPort

Perl/Загрязнение/Переносимость

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

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

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

END_OF_DOCUMENT_MARKER
ExtUtils::Constant::Utils

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

ExtUtils::Constant::XS

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

ExtUtils::Embed

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

ExtUtils::Install

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

ExtUtils::Installed

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

ExtUtils::Liblist

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

ExtUtils::MM

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

ExtUtils::MM_AIX

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

ExtUtils::MM_Any

Методы ExtUtils::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_OS390

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

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

Создать файл начальной загрузки для использования 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 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 Source Filter

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

END_OF_DOCUMENT_MARKER
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

Интерфейс OO к файлу 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

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

ODBM_File

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

Opcode

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

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::Html::Util

Вспомогательные функции для 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 цветовыми кодами

Pod::Perldoc::ToChecker

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

Pod::Perldoc::ToMan

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

Pod::Perldoc::ToNroff

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

Pod::Perldoc::ToPod

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

Pod::Perldoc::ToRtf

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

Pod::Perldoc::ToTerm

Вывод Pod с кодами терминала

Pod::Perldoc::ToText

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

Pod::Perldoc::ToTk

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

Pod::Perldoc::ToXml

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

Pod::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 в дереве каталогов

END_OF_DOCUMENT_MARKER
Pod::Simple::SimpleTree

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

Pod::Simple::Subclassing

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

Pod::Simple::Text

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

Pod::Simple::TextContent

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

Pod::Simple::XHTML

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

Pod::Simple::XMLOutStream

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

Pod::Text

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

Pod::Text::Color

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

Pod::Text::Overstrike

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

Pod::Text::Termcap

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

Pod::Usage

Извлечение документации POD и отображение информации о применении

SDBM_File

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

Safe

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

Scalar::Util

Выборка общих подпрограмм для скалярных переменных

Search::Dict

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

SelectSaver

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

SelfLoader

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

Storable

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

Sub::Util

Выборка служебных подпрограмм для подпрограмм и ссылок CODE

Symbol

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

Sys::Hostname

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

Sys::Syslog

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

Sys::Syslog::Win32

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

TAP::Base

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

TAP::Formatter::Base

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

TAP::Formatter::Color

Запуск скриптов тестов Perl с цветом

TAP::Formatter::Console

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

TAP::Formatter::Console::ParallelSession

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

TAP::Formatter::Console::Session

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

TAP::Formatter::File

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

TAP::Formatter::File::Session

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

TAP::Formatter::Session

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

TAP::Harness

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

TAP::Harness::Env

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

TAP::Object

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

TAP::Parser

Разбор выходных данных TAP

TAP::Parser::Aggregator

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

TAP::Parser::Grammar

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

TAP::Parser::Iterator

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

TAP::Parser::Iterator::Array

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

TAP::Parser::Iterator::Process

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

TAP::Parser::Iterator::Stream

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

TAP::Parser::IteratorFactory

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

TAP::Parser::Multiplexer

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

TAP::Parser::Result

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

TAP::Parser::Result::Bailout

Токен результата выхода.

TAP::Parser::Result::Comment

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

TAP::Parser::Result::Plan

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

TAP::Parser::Result::Pragma

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

TAP::Parser::Result::Test

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

TAP::Parser::Result::Unknown

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

TAP::Parser::Result::Version

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

TAP::Parser::Result::YAML

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

TAP::Parser::ResultFactory

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

TAP::Parser::Scheduler

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

TAP::Parser::Scheduler::Job

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

TAP::Parser::Scheduler::Spinner

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

TAP::Parser::Source

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

TAP::Parser::SourceHandler

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

TAP::Parser::SourceHandler::Executable

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

TAP::Parser::SourceHandler::File

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

TAP::Parser::SourceHandler::Handle

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

TAP::Parser::SourceHandler::Perl

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

TAP::Parser::SourceHandler::RawTAP

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

TAP::Parser::YAMLish::Reader

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

TAP::Parser::YAMLish::Writer

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

Term::ANSIColor

Вывод на цветной экран с помощью последовательностей ANSI

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

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

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

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

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

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

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

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

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 Unified Ideographs

Unicode::Collate::CJK::GB2312

Установление весов для CJK Unified Ideographs

Unicode::Collate::CJK::JISX0208

Установление весов JIS KANJI для Unicode::Collate

Unicode::Collate::CJK::Korean

Установление весов для CJK Unified Ideographs

Unicode::Collate::CJK::Pinyin

Установление весов для CJK Unified Ideographs

Unicode::Collate::CJK::Stroke

Установление весов для CJK Unified Ideographs

Unicode::Collate::CJK::Zhuyin

Установление весов для CJK Unified Ideographs

Unicode::Collate::Locale

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

Unicode::Normalize

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

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

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

Win32CORE

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

XS::APItest

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

XS::Typemap

Модуль для тестирования XS typemaps, поставляемых с 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 значениями PERL5LIB, PERLLIB, и PERL_USE_UNSAFE_INC.) Все они должны иметь свою собственную документацию, установленную и доступную через вашу систему команду man(1). Если у вас нет программы find, вы можете использовать программу Perl find2perl вместо неё, которая генерирует Perl-код для запуска через perl. Если у вас есть программа man, но она не находит ваши модули, вам нужно исправить путь к man. См. perl для получения подробностей. Если у вас нет команды системы man, вы можете попробовать программу perldoc.

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

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

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

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

CPAN

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

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

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

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

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

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

  • Типы данных и утилиты типов данных

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

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

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

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

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

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

  • Международные настройки и языковые локали

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

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

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

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

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

  • Почта и новости Usenet

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

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

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

Вы можете найти CPAN в интернете по адресу https://www.cpan.org/

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

(Следующий раздел заимствован непосредственно из файла модулей Тима Банса, доступного на ближайшем сайте 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 на 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–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.36.0/perlmodlib

Spec-Zone.ru

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