Spec-Zone.ru › Perl 5.38

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

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

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

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

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

attributes

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

autodie

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

autodie::exception

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

autodie::exception::system

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

autodie::hints

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

autodie::skip

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

autouse

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

base

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

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

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

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

stable

Упрощенное использование экспериментальных функций, когда известно, что они стабильны

strict

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

subs

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

threads

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

threads::shared

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

utf8

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

vars

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

version

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

vmsish

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

warnings

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

warnings::register

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

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

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

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

Amiga::ARexx

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

Amiga::Exec

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

AnyDBM_File

Обеспечивает фреймворк для множественных DBM

App::Cpan

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

App::Prove

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

App::Prove::State

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

App::Prove::State::Result

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

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

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

Archive::Tar

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

Archive::Tar::File

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

Attribute::Handlers

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

AutoLoader

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

AutoSplit

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

B

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

B::Concise

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

B::Deparse

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

B::Op_private

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

B::Showlex

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

B::Terse

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

B::Xref

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

Benchmark

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

IO::Socket::IP

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

Socket

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

CORE

Пространство имён для основных процедур Perl

CPAN

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

CPAN::API::HOWTO

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

CPAN::Debug

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

CPAN::Distroprefs

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

CPAN::FirstTime

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

CPAN::HandleConfig

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

CPAN::Kwalify

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

CPAN::Meta

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

CPAN::Meta::Converter

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

CPAN::Meta::Feature

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

CPAN::Meta::History

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

CPAN::Meta::History::Meta_1_0

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

CPAN::Meta::History::Meta_1_1

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

CPAN::Meta::History::Meta_1_2

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

CPAN::Meta::History::Meta_1_3

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

CPAN::Meta::History::Meta_1_4

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

CPAN::Meta::Merge

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

CPAN::Meta::Prereqs

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

CPAN::Meta::Requirements

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

CPAN::Meta::Spec

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

CPAN::Meta::Validator

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

CPAN::Meta::YAML

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

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 или zlib-ng

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/Pollution/Переносимость

Devel::Peek

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

Devel::SelfStubber

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

Digest

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

Digest::MD5

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

Digest::SHA

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

Digest::base

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

Digest::file

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

DirHandle

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

Dumpvalue

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

DynaLoader

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

Encode

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

Encode::Alias

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

Encode::Byte

Кодировки одиночных байтов

Encode::CJKConstants

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

Encode::CN

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

Encode::CN::HZ

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

Encode::Config

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

Encode::EBCDIC

Кодировки EBCDIC

Encode::Encoder

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

Encode::Encoding

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

Encode::GSM0338

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

Encode::Guess

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

Encode::JP

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

Encode::JP::H2Z

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

Encode::JP::JIS7

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

Encode::KR

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

Encode::KR::2022_KR

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

Encode::MIME::Header

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

Encode::MIME::Name

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

Encode::PerlIO

Подробный документ по Encode и PerlIO

Encode::Supported

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

Encode::Symbol

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

Encode::TW

Тайваньские китайские кодировки

Encode::Unicode

Различные форматы преобразования Unicode

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

Методы MM, не зависящие от платформы

ExtUtils::MM_BeOS

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

ExtUtils::MM_Cygwin

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

ExtUtils::MM_DOS

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

ExtUtils::MM_Darwin

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

ExtUtils::MM_MacOS

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

ExtUtils::MM_NW5

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

ExtUtils::MM_OS2

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

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

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

ExtUtils::Typemaps::Cmd

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

ExtUtils::Typemaps::InputMap

Элемент раздела INPUT в файле типамапа

ExtUtils::Typemaps::OutputMap

Элемент раздела OUTPUT в файле типамапа

ExtUtils::Typemaps::Type

Элемент раздела TYPEMAP в файле типамапа

ExtUtils::XSSymSet

Поддержка наборов имен символов для VMS-линковщика

ExtUtils::testlib

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

Fatal

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

Fcntl

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

File::Basename

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

File::Compare

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

File::Copy

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

File::DosGlob

Глоббинг в стиле DOS и некоторые другие функции

File::Fetch

Общий механизм получения файлов

File::Find

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

File::Glob

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

File::GlobMapper

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

File::Path

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

File::Spec

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

File::Spec::AmigaOS

File::Spec для AmigaOS

File::Spec::Cygwin

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

File::Spec::Epoc

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

File::Spec::Functions

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

File::Spec::Mac

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

File::Spec::OS2

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

File::Spec::Unix

File::Spec для Unix, основа для других модулей File::Spec

File::Spec::VMS

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

File::Spec::Win32

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

File::Temp

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

File::stat

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

FileCache

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

FileHandle

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

Filter::Simple

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

Filter::Util::Call

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

FindBin

Нахождение директории исходного perl-скрипта

GDBM_File

Доступ к библиотеке gdbm с помощью Perl5.

Getopt::Long

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

Getopt::Std

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

HTTP::Tiny

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

Hash::Util

Набор общеупотребительных подпрограмм для хешей

Hash::Util::FieldHash

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

I18N::Collate

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

I18N::LangTags

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

I18N::LangTags::Detect

Обнаружение языковых предпочтений пользователя

I18N::LangTags::List

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

I18N::Langinfo

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

IO

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

IO::Compress::Base

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

IO::Compress::Bzip2

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

IO::Compress::Deflate

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

IO::Compress::FAQ

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

IO::Compress::Gzip

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

IO::Compress::RawDeflate

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

IO::Compress::Zip

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

IO::Dir

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

IO::File

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

IO::Handle

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

IO::Pipe

Обеспечение объектных методов для каналов

IO::Poll

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

IO::Seekable

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

IO::Select

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

IO::Socket

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

IO::Socket::INET

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

IO::Socket::UNIX

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

IO::Uncompress::AnyInflate

Распаковка файлов/буферов с использованием zlib (zip, gzip)

IO::Uncompress::AnyUncompress

Распаковка файлов/буферов gzip, zip, bzip2, zstd, xz, lzma, lzip, lzf или lzop

IO::Uncompress::Base

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

IO::Uncompress::Bunzip2

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

IO::Uncompress::Gunzip

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

IO::Uncompress::Inflate

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

IO::Uncompress::RawInflate

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

IO::Uncompress::Unzip

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

IO::Zlib

Интерфейс IO:: для Compress::Zlib

IPC::Cmd

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

IPC::Msg

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

IPC::Open2

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

IPC::Open3

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

IPC::Semaphore

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

IPC::SharedMem

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

IPC::SysV

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

Internals

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

JSON::PP

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

JSON::PP::Boolean

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

List::Util

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

List::Util::XS

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

Locale::Maketext

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

Locale::Maketext::Cookbook

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

Locale::Maketext::Guts

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

Locale::Maketext::GutsLoader

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

Locale::Maketext::Simple

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

Locale::Maketext::TPJ13

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

MIME::Base64

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

MIME::QuotedPrint

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

Math::BigFloat

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

Math::BigInt

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

Math::BigInt::Calc

Модуль чистого Perl для поддержки Math::BigInt

Math::BigInt::FastCalc

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

Math::BigInt::Lib

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

Math::BigRat

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

Math::Complex

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

Math::Trig

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

Memoize

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

Memoize::AnyDBM_File

Интерфейс для обеспечения EXISTS для AnyDBM_File для Storable

Memoize::Expire

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

Memoize::NDBM_File

Интерфейс для обеспечения EXISTS для NDBM_File для Storable

Memoize::SDBM_File

УСТРАНЕНО совместимый шлюз

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

Класс клиента почтового протокола 3 (RFC1939)

Net::Ping

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

Net::SMTP

Простой клиент протокола передачи почты

Net::Time

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

Net::hostent

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

Net::libnetFAQ

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

Net::netent

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

Net::protoent

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

Net::servent

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

O

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

ODBM_File

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

Opcode

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

POSIX

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

Params::Check

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

Parse::CPAN::Meta

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

Perl::OSType

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

PerlIO

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

PerlIO::encoding

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

PerlIO::mmap

Картирование памяти для ввода-вывода

PerlIO::scalar

Внутрипроцессорное ввод-вывод, ввод-вывод скаляров

PerlIO::via

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

PerlIO::via::QuotedPrint

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

Pod::Checker

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

Pod::Escapes

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

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

Интерфейс для разбора Pod с помощью парсера "pull"

Pod::Simple::PullParserEndToken

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

Pod::Simple::PullParserStartToken

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

Pod::Simple::PullParserTextToken

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

Pod::Simple::PullParserToken

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

Pod::Simple::RTF

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

Pod::Simple::Search

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

Pod::Simple::SimpleTree

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

Pod::Simple::Subclassing

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

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

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
END_OF_DOCUMENT_MARKER

Модуль для событий содержит другие события

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

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

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

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

Win32CORE

Плацехолдеры функций Win32 CORE

XS::APItest

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

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 значениями PERL5LIB, PERLLIB, и PERL_USE_UNSAFE_INC.) У всех них должна быть своя собственная документация, доступная через команду system 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 в интернете по адресу https://www.cpan.org/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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–2023 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.38.0/perlmodlib

Spec-Zone.ru

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