PERLMODLIB(1)
โจ PERLMODLIB(1) โจ
Perl Programmers Reference Guide ๐ bestie, this is the module-library tour. No cap.
๐ NAME ๐
perlmodlib โ constructing new Perl modules and finding existing ones ๐ซถ
๐ THE PERL MODULE LIBRARY ๐
Okay so, like, many modules are included in the Perl distribution. Theyโre described below, and they all end in .pm. You may also discover compiled library files, usually ending in .so, or tiny little pieces of modules meant to be autoloaded, ending in .al โ those were automatically generated by the installation process. You may also find files in the library directory ending in either .pl or .ph. Those are old libraries supplied so old programs that use them still run. The .pl files will all eventually be converted into standard modules, and the .ph files made by h2ph will probably end up as extension modules made by h2xs. (Some .ph values may already be available through the POSIX, Errno, or Fcntl modules.) The pl2pm file in the distribution may help in your conversion, but itโs just a mechanical process and therefore far from bulletproof. ๐
๐ง Pragmatic Modules ๐ง
They work somewhat like compiler directives (pragmata) in that they tend to affect the compilation of your program, and thus will usually work well only when used within a use, or no. Most of these are lexically scoped, so an inner BLOCK may countermand them by saying:
no integer;
no strict 'refs';
no warnings;
which lasts until the end of that BLOCK.
Some pragmas are lexically scoped โ typically those that affect the $^H hints variable. Others affect the current package instead, like use vars and use subs, which allow you to predeclare a variable or subroutines within a particular file rather than just a block. Such declarations are effective for the entire file for which they were declared. You cannot rescind them with no vars or no subs.
The following pragmas are defined (and have their own documentation).
attributesโ get/set subroutine or variable attributesautodieโ replace functions with ones that succeed or die with lexical scopeautodie::exceptionโ exceptions from autodying functions.autodie::exception::systemโ exceptions from autodyingsystem().autodie::hintsโ provide hints about user subroutines to autodieautodie::skipโ skip a package when throwing autodie exceptionsautouseโ postpone load of modules until a function is usedbaseโ establish an ISA relationship with base classes at compile timebigfloatโ transparent big floating point number support for Perlbigintโ transparent big integer support for Perlbignumโ transparent big number support for Perlbigratโ transparent big rational number support for Perlblibโ use MakeMakerโs uninstalled version of a packagebuiltinโ import built-in utility functionsbytesโ expose the individual bytes of characterscharnamesโ access to Unicode character names and named character sequences; also define character namesconstantโ declare constantsdeprecateโ Perl pragma for deprecating the inclusion of a module in corediagnosticsโ produce verbose warning diagnosticsencodingโ allows you to write your script in non-ASCII and non-UTF-8encoding::warningsโ warn on implicit encoding conversionsexperimentalโ experimental features made easyfeatureโ enable new featuresfieldsโ compile-time class fieldsfiletestโ control the filetest permission operatorsifโ"use"a Perl module if a condition holdsintegerโ use integer arithmetic instead of floating pointlessโ request less of somethinglibโ manipulate@INCat compile timelocaleโ use or avoid POSIX locales for built-in operationsmroโ Method Resolution Orderokโ alternative toTest::More::use_okopenโ set default PerlIO layers for input and outputopsโ restrict unsafe operations when compilingoverloadโ package for overloading Perl operationsoverloadingโ lexically control overloadingparentโ establish an ISA relationship with base classes at compile timereโ alter regular expression behavioursigtrapโ enable simple signal handlingsortโ controlsort()behavioursource::encodingโ declare Perl source code encodingstableโ experimental features made easy, once we know theyโre stablestrictโ restrict unsafe constructssubsโ predeclare subroutine namesthreadsโ Perl interpreter-based threadsthreads::sharedโ Perl extension for sharing data structures between threadsutf8โ enable/disable UTF-8 (or UTF-EBCDIC) in source codevarsโ predeclare global variable namesversionโ Perl extension for Version Objectsvmsishโ control VMS-specific language featureswarningsโ control optional warningswarnings::registerโ warnings import function
๐ Standard Modules ๐
Standard, bundled modules are all expected to behave in a well-defined manner with respect to namespace pollution because they use the Exporter module. See their own documentation for details.
Itโs possible that not all modules listed below are installed on your system. For example, the GDBM_File module will not be installed if you donโt have the gdbm library.
Amiga::ARexxโ Perl extension for ARexx supportAmiga::Execโ Perl extension for low level amiga supportAnyDBM_Fileโ provide framework for multiple DBMsApp::Cpanโ easily interact with CPAN from the command lineApp::Proveโ implements the"prove"command.App::Prove::Stateโ state storage for the"prove"command.App::Prove::State::Resultโ individual test suite results.App::Prove::State::Result::Testโ individual test results.Archive::Tarโ module for manipulations of tar archivesArchive::Tar::Fileโ a subclass for in-memory extracted file fromArchive::TarAttribute::Handlersโ simpler definition of attribute handlersAutoLoaderโ load subroutines only on demandAutoSplitโ split a package for autoloadingBโ the Perl Compiler BackendB::Conciseโ walk Perl syntax tree, printing concise info about opsB::Deparseโ Perl compiler backend to produce perl codeB::Op_privateโ OPop_privateflag definitionsB::Showlexโ show lexical variables used in functions or filesB::Terseโ walk Perl syntax tree, printing terse info about opsB::Xrefโ generates cross reference reports for Perl programsBenchmarkโ benchmark running times of Perl code"IO::Socket::IP"โ family-neutral IP socket supporting both IPv4 and IPv6"Socket"โ networking constants and support functions"Test2::Tools::Refcount"โ assert reference counts on objectsCOREโ namespace for Perlโs core routinesCPANโ query, download and build perl modules from CPAN sitesCPAN::API::HOWTOโ a recipe book for programming withCPAN.pmCPAN::Debugโ internal debugging forCPAN.pmCPAN::Distroprefsโ read and match distroprefsCPAN::FirstTimeโ utility forCPAN::Configfile InitializationCPAN::HandleConfigโ internal configuration handling forCPAN.pmCPAN::Kwalifyโ interface betweenCPAN.pmandKwalify.pmCPAN::Metaโ the distribution metadata for a CPAN distCPAN::Meta::Converterโ convert CPAN distribution metadata structuresCPAN::Meta::Featureโ an optional feature provided by a CPAN distributionCPAN::Meta::Historyโ history of CPAN Meta Spec changesCPAN::Meta::History::Meta_1_0โ version 1.0 metadata specification forMETA.ymlCPAN::Meta::History::Meta_1_1โ version 1.1 metadata specification forMETA.ymlCPAN::Meta::History::Meta_1_2โ version 1.2 metadata specification forMETA.ymlCPAN::Meta::History::Meta_1_3โ version 1.3 metadata specification forMETA.ymlCPAN::Meta::History::Meta_1_4โ version 1.4 metadata specification forMETA.ymlCPAN::Meta::Mergeโ merging CPAN Meta fragmentsCPAN::Meta::Prereqsโ a set of distribution prerequisites by phase and typeCPAN::Meta::Requirementsโ a set of version requirements for a CPAN distCPAN::Meta::Requirements::Rangeโ a set of version requirements for a CPAN distCPAN::Meta::Specโ specification for CPAN distribution metadataCPAN::Meta::Validatorโ validate CPAN distribution metadata structuresCPAN::Meta::YAMLโ read and write a subset of YAML for CPAN Meta filesCPAN::Noxโ wrapper aroundCPAN.pmwithout using any XS moduleCPAN::Pluginโ base class for CPAN shell extensionsCPAN::Plugin::Specfileโ proof of concept implementation of a trivialCPAN::PluginCPAN::Queueโ internal queue support forCPAN.pmCPAN::Tarzipโ internal handling of tar archives forCPAN.pmCPAN::Versionโ utility functions to compare CPAN versionsCarpโ alternative warn and die for modulesClass::Structโ declare struct-like datatypes as Perl classesCompress::Raw::Bzip2โ low-Level Interface to bzip2 compression libraryCompress::Raw::Zlibโ low-Level Interface to zlib or zlib-ng compression libraryCompress::Zlibโ interface to zlib compression libraryConfigโ access Perl configuration informationConfig::Extensionsโ hash lookup of which core extensions were built.Config::Perl::Vโ structured data retrieval ofperl -VoutputCwdโ get pathname of current working directoryDBโ programmatic interface to the Perl debugging APIDBM_Filterโ filter DBM keys/valuesDBM_Filter::compressโ filter forDBM_FilterDBM_Filter::encodeโ filter forDBM_FilterDBM_Filter::int32โ filter forDBM_FilterDBM_Filter::nullโ filter forDBM_FilterDBM_Filter::utf8โ filter forDBM_FilterDB_Fileโ Perl5 access to Berkeley DB version 1.xData::Dumperโ stringified perl data structures, suitable for both printing and"eval"Devel::PPPortโ Perl/Pollution/PortabilityDevel::Peekโ a data debugging tool for the XS programmerDevel::SelfStubberโ generate stubs for a SelfLoading moduleDigestโ modules that calculate message digestsDigest::MD5โ Perl's interface to the MD5 Algorithm ๐Digest::SHAโ a Perl extension for SHA-1/224/256/384/512 ๐ฅDigest::baseโ the base class for all the Digest stuff, the mother of the digest modules ๐Digest::fileโ calculates digests of files, literally just that ๐ซถDirHandleโ (obsolete!) supplies object methods for directory handles ๐Dumpvalueโ provides a screen dump of Perl data ๐DynaLoaderโ dynamically loads C libraries into your Perl code, no cap โจEncodeโ character encodings in Perl, the whole entire saga ๐Encode::Aliasโ alias definitions to encodings, the nickname giver ๐Encode::Byteโ single byte encodings ๐Encode::CJKConstantsโ internally used byEncode::??::ISO_2022_*(yes, that's a literal question mark wildcard situation, iykyk) ๐ฆEncode::CNโ China-based Chinese encodings ๐จ๐ณEncode::CN::HZโ internally used byEncode::CNEncode::Configโ internally used byEncodeEncode::EBCDICโ EBCDIC encodings, the old-school mainframe vibe ๐Encode::Encoderโ an object oriented encoder โจEncode::Encodingโ the Encode implementation base class, the blueprint fr frEncode::GSM0338โ ETSI GSM 03.38 encoding, for your texty vibes ๐ฑEncode::Guessโ guesses the encoding from the data, detective behavior ๐ต๏ธEncode::JPโ Japanese encodings ๐ฏ๐ตEncode::JP::H2Zโ internally used byEncode::JP::2022_JP*Encode::JP::JIS7โ internally used byEncode::JPEncode::KRโ Korean encodings ๐ฐ๐ทEncode::KR::2022_KRโ internally used byEncode::KREncode::MIME::Headerโ MIME encoding for an unstructured email header ๐Encode::MIME::Nameโ internally used byEncodeEncode::PerlIOโ a detailed document on Encode and PerlIO, grab a snack bestie it's a whole read ๐Encode::Supportedโ encodings supported by Encode, the full guest list ๐Encode::Symbolโ symbol encodings โจEncode::TWโ Taiwan-based Chinese encodingsEncode::Unicodeโ various Unicode Transformation Formats ๐Encode::Unicode::UTF7โ UTF-7 encodingEnglishโ use nice English (or awk) names for those ugly punctuation variables, your faves get real names now ๐Envโ a Perl module that imports environment variables as scalars or arrays ๐ฑErrnoโ system errno constants, all the error codes lined up ๐Exporterโ implements the default import method for modules, the one doing all the heavy lifting behind the scenes ๐ซถExporter::Heavyโ Exporter guts, the messy internal bits ๐ExtUtils::CBuilderโ compile and link C code for Perl modules, builder era ๐ ๏ธExtUtils::CBuilder::Platform::Windowsโ builder class for Windows platforms ๐ชExtUtils::Commandโ utilities to replace common UNIX commands in Makefiles etc., lil stand-ins ๐ExtUtils::Command::MMโ commands for the MM's to use in MakefilesExtUtils::Constantโ generate XS code to import C header constants โจExtUtils::Constant::Baseโ base class forExtUtils::Constantobjects ๐ExtUtils::Constant::Utilsโ helper functions forExtUtils::Constant๐ซถExtUtils::Constant::XSโ generate C code for XS modules' constants ๐ExtUtils::Embedโ utilities for embedding Perl in C/C++ applications, Perl said "I live here now" ๐ฅExtUtils::Installโ install files from here to there, a mover fr fr ๐ฆExtUtils::Installedโ inventory management of installed modules, the receipt keeper ๐งพExtUtils::Liblistโ determine libraries to use and how to use themExtUtils::MMโ OS adjustedExtUtils::MakeMakersubclass ๐ExtUtils::MM::UtilsโExtUtils::MMmethods without dependency onExtUtils::MakeMakerExtUtils::MM_AIXโ AIX specific subclass ofExtUtils::MM_UnixExtUtils::MM_Anyโ platform-agnostic MM methods, no OS drama ๐ExtUtils::MM_BeOSโ methods to override UN*X behaviour inExtUtils::MakeMakerExtUtils::MM_Cygwinโ methods to override UN*X behaviour inExtUtils::MakeMakerExtUtils::MM_DOSโ DOS specific subclass ofExtUtils::MM_UnixExtUtils::MM_Darwinโ special behaviors for OS X ๐ExtUtils::MM_MacOSโ once produced Makefiles for MacOS Classic, retired icon energy ๐ExtUtils::MM_NW5โ methods to override UN*X behaviour inExtUtils::MakeMakerExtUtils::MM_OS2โ methods to override UN*X behaviour inExtUtils::MakeMakerExtUtils::MM_OS390โ OS390 specific subclass ofExtUtils::MM_UnixExtUtils::MM_QNXโ QNX specific subclass ofExtUtils::MM_UnixExtUtils::MM_UWINโ U/WIN specific subclass ofExtUtils::MM_UnixExtUtils::MM_Unixโ methods used byExtUtils::MakeMaker, the main character honestly ๐ExtUtils::MM_VMSโ methods to override UN*X behaviour inExtUtils::MakeMakerExtUtils::MM_VOSโ VOS specific subclass ofExtUtils::MM_UnixExtUtils::MM_Win32โ methods to override UN*X behaviour inExtUtils::MakeMakerExtUtils::MM_Win95โ method to customize MakeMaker for Win9XExtUtils::MYโExtUtils::MakeMakersubclass for customization โจExtUtils::MakeMakerโ create a module Makefile, the blueprint printer ๐ExtUtils::MakeMaker::Configโ wrapper aroundConfig.pm๐ExtUtils::MakeMaker::FAQโ frequently asked questions about MakeMaker, all the answers bestie ๐ซถExtUtils::MakeMaker::Localeโ bundledEncode::Locale๐ExtUtils::MakeMaker::Tutorialโ writing a module with MakeMaker, the how-to โจExtUtils::Manifestโ utilities to write and check a MANIFEST file ๐งพExtUtils::Miniperlโ write the C code forminiperlmain.candperlmain.c๐ฅExtUtils::Mkbootstrapโ make a bootstrap file for use byDynaLoader๐ฅพExtUtils::Mksymlistsโ write linker options files for dynamic extension ๐ExtUtils::PL2Batโ batch file creation to run perl scripts on Windows ๐ชExtUtils::Packlistโ manage.packlistfiles ๐ExtUtils::ParseXSโ converts Perl XS code into C code, the translator ๐ExtUtils::ParseXS::Constantsโ initialization values for some globals ๐ฑExtUtils::ParseXS::Evalโ clean package to evaluate code in ๐งผExtUtils::ParseXS::Nodeโ classes for nodes of anExtUtils::ParseXSAST ๐ณExtUtils::ParseXS::Utilitiesโ subroutines used withExtUtils::ParseXS๐ ๏ธExtUtils::Typemapsโ read/write/modify Perl/XS typemap files ๐ExtUtils::Typemaps::Cmdโ quick commands for handling typemaps โกExtUtils::Typemaps::InputMapโ entry in the INPUT section of a typemap ๐ฅExtUtils::Typemaps::OutputMapโ entry in the OUTPUT section of a typemap ๐คExtUtils::Typemaps::Typeโ entry in the TYPEMAP section of a typemap ๐ท๏ธExtUtils::XSSymSetโ keep sets of symbol names palatable to the VMS linker ๐ฝ๏ธExtUtils::testlibโ addblib/*directories to@INC๐ซถFatalโ replace functions with equivalents which succeed or die, no middle ground ๐Fcntlโ various flag constants and helper functions from C'sfcntl.h๐ฉFile::Basenameโ parse file paths into directory, filename and suffix. ๐File::Compareโ compare files or filehandles, spot the difference โจFile::Copyโ copy files or filehandles ๐File::DosGlobโ DOS like globbing and then some ๐ชFile::Fetchโ a generic file fetching mechanism ๐ฃFile::Findโ traverse a directory tree. ๐ณFile::Globโ Perl extension for the BSD glob routine ๐File::GlobMapperโ extend File Glob to allow input and output files ๐File::Pathโ create or remove directory trees ๐ฒFile::Specโ portably perform operations on file names, no OS beef ๐File::Spec::AmigaOSโFile::Specfor AmigaOSFile::Spec::Cygwinโ methods for Cygwin file specsFile::Spec::Epocโ methods for Epoc file specsFile::Spec::Functionsโ portably perform operations on file names ๐ซถFile::Spec::MacโFile::Specfor Mac OS (Classic) ๐File::Spec::OS2โ methods for OS/2 file specsFile::Spec::UnixโFile::Specfor Unix, base for otherFile::Specmodules ๐File::Spec::VMSโ methods for VMS file specsFile::Spec::Win32โ methods for Win32 file specsFile::Tempโ return name and handle of a temporary file safely, bestie behavior ๐งFile::statโ by-name interface to Perl's built-instat()functions ๐FileCacheโ keep more files open than the system permits, chaotic but iconic ๐FileHandleโ supply object methods for filehandles ๐Filter::Simpleโ simplified source filtering โจFilter::Util::Callโ Perl Source Filter Utility Module ๐ ๏ธFindBinโ locate directory of original Perl script ๐GDBM_Fileโ Perl5 access to the gdbm library. ๐๏ธGetopt::Longโ extended processing of command line options, the fancy one ๐Getopt::Long::ParserโGetopt::Longobject-oriented interface ๐Getopt::Stdโ process single-character switches with switch clustering โกHTTP::Tinyโ a small, simple, correct HTTP/1.1 client, tiny but correct fr fr ๐ฆHash::Utilโ a selection of general-utility hash subroutines ๐๏ธHash::Util::FieldHashโ support for Inside-Out Classes ๐I18N::Collateโ compare 8-bit scalar data according to the current locale ๐I18N::LangTagsโ functions for dealing with RFC3066-style language tags ๐ท๏ธI18N::LangTags::Detectโ detect the user's language preferences ๐ต๏ธI18N::LangTags::Listโ tags and names for human languages ๐ฃ๏ธI18N::Langinfoโ query locale information ๐IOโ load various IO modules, the whole squad ๐ซถIO::Compressโ read/write compressed data in multiple formats ๐ฆIO::Compress::Baseโ base class forIO::Compressmodules ๐IO::Compress::Bzip2โ write bzip2 files/buffers ๐๏ธIO::Compress::Deflateโ write RFC 1950 files/buffers ๐จIO::Compress::FAQโ frequently asked questions aboutIO::Compress๐IO::Compress::Gzipโ write RFC 1952 files/buffers ๐๏ธIO::Compress::RawDeflateโ write RFC 1951 files/buffers ๐จIO::Compress::Zipโ write zip files/buffers ๐คIO::Dirโ supply object methods for directory handles ๐IO::Fileโ supply object methods for filehandles ๐IO::Handleโ supply object methods for I/O handles ๐IO::Pipeโ supply object methods for pipes ๐ฐIO::Pollโ object interface to the system poll call ๐กIO::Seekableโ supply seek based methods for I/O objects โฉIO::Selectโ OO interface to the "select" system call โจIO::Socketโ object interface to socket communications ๐IO::Socket::INETโ object interface for AF_INET domain sockets ๐IO::Socket::UNIXโ object interface for AF_UNIX domain sockets ๐งIO::Uncompress::AnyInflateโ uncompress zlib-based (zip, gzip) file/buffer ๐
IO::Uncompress::AnyUncompressโ the "idk what format this even is" bestie โจ it'll uncompress gzip, zip, bzip2, zstd, xz, lzma, lzip, lzf or lzop, from a file or a buffer. versatile icon ๐IO::Uncompress::Baseโ the base class all theIO::Uncompressmodules build on. the mother of the group chat ๐ซถIO::Uncompress::Bunzip2โ read bzip2 files/buffers. that's it, that's the vibe ๐IO::Uncompress::Gunzipโ reads RFC 1952 files/buffers. old-school gzip energy ๐ผIO::Uncompress::Inflateโ reads RFC 1950 files/buffers ๐ธIO::Uncompress::RawInflateโ reads RFC 1951 files/buffers. yes there are like four of these, and yes they're all different, iykyk ๐IO::Uncompress::Unzipโ read zip files/buffers. the format ur group chat meme folders live in ๐๏ธIO::Zlibโ anIO::style interface toCompress::Zlib๐ฆIPC::Cmdโ finding and running system commands, but made easy. no cap, it really is easier ๐ซถIPC::Msgโ SysV Msg IPC object class ๐IPC::Open2โ open a process for both reading and writing usingopen2()๐ฏIPC::Open3โ open a process for reading, writing, and error handling usingopen3()๐IPC::Semaphoreโ SysV Semaphore IPC object class ๐ฆIPC::SharedMemโ SysV Shared Memory IPC object class ๐งIPC::SysVโ System V IPC constants and system calls โ๏ธInternalsโ a reserved special namespace for internals-related functions. do not touch, it's reserved bestie ๐JSON::PPโ aJSON::XScompatible pure-Perl module. pure Perl slay ๐ชโจJSON::PP::Booleanโ a dummy module that just providesJSON::PP::Boolean๐คก iconic honestlyList::Utilโ a whole selection of general-utility list subroutines ๐List::Util::XSโ tells you whetherList::Utilgot compiled with a C compiler or not. yes/no girlie ๐Locale::Maketextโ a framework for localization ๐Locale::Maketext::Cookbookโ recipes for usingLocale::Maketext. cookbook besties we love u ๐Locale::Maketext::Gutsโ deprecated module for loading theLocale::Maketextutf8 code. retired, don't use it ๐ซLocale::Maketext::GutsLoaderโ also deprecated, also for loading theLocale::Maketextutf8 code. they're twins and both retired ๐Locale::Maketext::Simpleโ a simple interface toLocale::Maketext::Lexicon๐ธLocale::Maketext::TPJ13โ an article about software localization, living its little essay era ๐MIME::Base64โ encoding and decoding of base64 strings ๐คMIME::QuotedPrintโ encoding and decoding of quoted-printable strings ๐งMath::BigFloatโ arbitrary size floating point math package. floats that are not like other floats ๐Math::BigIntโ arbitrary size integer math package. numbers so big they needed their own package ๐Math::BigInt::Calcโ pure Perl module to supportMath::BigInt๐ชMath::BigInt::Calc... wait, next:Math::BigInt::FastCalcโ it'sMath::BigInt::Calcbut with some XS for more speed โกMath::BigInt::Libโ the virtual parent class forMath::BigIntlibraries ๐ซถMath::BigRatโ arbitrary size rational number math package ๐งฎMath::Complexโ complex numbers and associated mathematical functions ๐Math::Trigโ trigonometric functions ๐Memoizeโ makes functions faster by trading space for time. a classic trade ๐พโ๏ธโฑ๏ธMemoize::AnyDBM_Fileโ glue to provideEXISTSforAnyDBM_FileforStorableuse ๐ฉนMemoize::Expireโ a plug-in module for automatic expiration of memoized values โMemoize::NDBM_Fileโ glue to provideEXISTSforNDBM_FileforStorableuse ๐ฉนMemoize::SDBM_Fileโ a DEPRECATED compatibility shim. old, retired, leave her alone ๐ซ๐Memoize::Storableโ stores memoized data in aStorabledatabase ๐ฆModule::CoreListโ tells you what modules shipped with which versions of perl ๐บ๏ธModule::CoreList::Utilsโ same but for what utilities shipped with versions of perl ๐งModule::Loadโ runtimerequireof both modules and files ๐Module::Load::Conditionalโ looking up module information and/or loading at runtime ๐Module::Loadedโ mark modules as loaded or unloaded โModule::Metadataโ gathers package and POD information from perl module files ๐ต๏ธNDBM_Fileโ tied access to ndbm files ๐NEXTโ provides a pseudo-classNEXT(et al) that allows method redispatch ๐ญNet::Cmdโ network command class, the one FTP, SMTP etc ride on ๐กNet::Configโ local configuration data for libnet โ๏ธNet::Domainโ attempts to evaluate the current host's internet name and domain ๐Net::FTPโ FTP client class ๐Net::FTP::dataconnโ FTP client data connection class ๐Net::NNTPโ NNTP client class ๐ฐNet::Netrcโ OO interface to the user's netrc file ๐Net::POP3โ Post Office Protocol 3 client class (RFC1939) ๐ฌNet::Pingโ check a remote host for reachability ๐ถNet::SMTPโ Simple Mail Transfer Protocol client โ๏ธNet::Timeโ time and daytime network client interface โฐNet::hostentโ by-name interface to Perl's built-ingethost*()functions ๐Net::libnetFAQโ the libnet Frequently Asked Questions โNet::netentโ by-name interface to Perl's built-ingetnet*()functions ๐ธ๏ธNet::protoentโ by-name interface to Perl's built-ingetproto*()functions ๐Net::serventโ by-name interface to Perl's built-ingetserv*()functions ๐๏ธOโ a generic interface to Perl compiler backends ๐ พ๏ธODBM_Fileโ tied access to odbm files ๐Opcodeโ disable named opcodes when compiling perl code ๐งPOSIXโ Perl's interface to IEEE Std 1003.1. the standards bestie ๐Params::Checkโ a generic input parsing/checking mechanism ๐Parse::CPAN::Metaโ parsesMETA.ymlandMETA.jsonCPAN metadata files ๐Perl::OSTypeโ maps Perl operating system names to generic types ๐ฅ๏ธPerlIOโ on demand loader for PerlIO layers, and the root of thePerlIO::*name space ๐ณPerlIO::encodingโ encoding layer ๐คPerlIO::mmapโ memory mapped IO ๐งPerlIO::scalarโ in-memory IO, scalar IO ๐PerlIO::viaโ helper class for PerlIO layers implemented in perl ๐ชPerlIO::via::QuotedPrintโ PerlIO layer for quoted-printable strings ๐งPod::Checkerโ check pod documents for syntax errors โPod::Escapesโ for resolving PodE<...>sequences ๐กPod::Functionsโ groups Perl's functions a laperlfunc.pod๐๏ธPod::Htmlโ module to convert pod files to HTML ๐Pod::Html::Utilโ helper functions for Pod-Html ๐ ๏ธPod::Manโ converts POD data to formatted *roff input ๐Pod::ParseLinkโ parses anL<>formatting code in POD text ๐Pod::Perldocโ looks up Perl documentation in Pod format ๐Pod::Perldoc::BaseToโ the base forPod::Perldocformatters ๐ซถPod::Perldoc::GetOptsOOโ a customized option parser forPod::Perldocโ๏ธPod::Perldoc::ToANSIโ renders Pod with ANSI color escapes ๐Pod::Perldoc::ToCheckerโ lets Perldoc check Pod for errors โPod::Perldoc::ToManโ lets Perldoc render Pod as man pages ๐Pod::Perldoc::ToNroffโ lets Perldoc convert Pod to nroff ๐Pod::Perldoc::ToPodโ lets Perldoc render Pod as ... Pod! inception but make it docs ๐ซPod::Perldoc::ToRtfโ lets Perldoc render Pod as RTF ๐Pod::Perldoc::ToTermโ renders Pod with terminal escapes ๐ปPod::Perldoc::ToTextโ lets Perldoc render Pod as plaintext ๐คPod::Perldoc::ToTkโ lets Perldoc useTk::Podto render Pod ๐ชPod::Perldoc::ToXmlโ lets Perldoc render Pod as XML ๐ท๏ธPod::Simpleโ a framework for parsing Pod ๐งPod::Simple::Checkerโ checks the Pod syntax of a document โPod::Simple::Debugโ putsPod::Simpleinto trace/debug mode ๐Pod::Simple::DumpAsTextโ dumps Pod-parsing events as text ๐Pod::Simple::DumpAsXMLโ turns Pod into XML ๐ท๏ธPod::Simple::HTMLโ converts Pod to HTML ๐Pod::Simple::HTMLBatchโ converts several Pod files to several HTML files ๐Pod::Simple::JustPodโ just the Pod, the whole Pod, and nothing but the Pod. she said what she said ๐Pod::Simple::LinkSectionโ represents the"section"attributes ofLcodes ๐Pod::Simple::Methodyโ turnsPod::Simpleevents into method calls ๐Pod::Simple::PullParserโ a pull-parser interface to parsing Pod ๐ฃPod::Simple::PullParserEndTokenโ end-tokens fromPod::Simple::PullParser๐Pod::Simple::PullParserStartTokenโ start-tokens fromPod::Simple::PullParser๐ฉPod::Simple::PullParserTextTokenโ text-tokens fromPod::Simple::PullParser๐คPod::Simple::PullParserTokenโ tokens fromPod::Simple::PullParser๐๏ธPod::Simple::RTFโ formats Pod as RTF ๐Pod::Simple::Searchโ finds POD documents in directory trees ๐ณPod::Simple::SimpleTreeโ parses Pod into a simple parse tree ๐ฒPod::Simple::Subclassingโ write a formatter as aPod::Simplesubclass ๐งฌPod::Simple::Textโ formats Pod as plaintext ๐คPod::Simple::TextContentโ gets the text content of Pod ๐Pod::Simple::XHTMLโ formats Pod as validating XHTML โ ๐Pod::Simple::XMLOutStreamโ turns Pod into XML ๐ท๏ธPod::Textโ converts POD data to formatted text ๐Pod::Text::Colorโ converts POD data to formatted color ASCII text ๐Pod::Text::Overstrikeโ converts POD data to formatted overstrike text โจ๏ธPod::Text::Termcapโ converts POD data to ASCII text with format escapes ๐ปPod::Usageโ extracts POD documentation and shows usage information ๐SDBM_Fileโ tied access to sdbm files ๐Safeโ compile and execute code in restricted compartments ๐Scalar::List::Utilsโ a distribution of general-utility subroutines ๐Scalar::Utilโ a selection of general-utility scalar subroutines โจSearch::Dictโ look, searches for a key in a dictionary file ๐SelectSaverโ save and restore the selected file handle ๐พSelfLoaderโ load functions only on demand ๐ขStorableโ persistence for Perl data structures ๐ฆSub::Utilโ a selection of utility subroutines for subs andCODEreferences ๐ ๏ธSymbolโ manipulate Perl symbols and their names ๐ฃSys::Hostnameโ tries every conceivable way to get the hostname. she's persistent, we love that ๐ชSys::Syslogโ Perl interface to the UNIXsyslog(3)calls ๐Sys::Syslog::Win32โ Win32 support forSys::Syslog๐ชTAP::Baseโ base class that provides common functionality toTAP::Parser๐ซถTAP::Formatter::Baseโ base class for harness output delegates ๐งฑTAP::Formatter::Colorโ run Perl test scripts with color ๐TAP::Formatter::Consoleโ harness output delegate for default console output ๐ฅ๏ธTAP::Formatter::Console::ParallelSessionโ harness output delegate for parallel console output ๐ฏTAP::Formatter::Console::Sessionโ harness output delegate for default console output ๐ฅ๏ธTAP::Formatter::Fileโ harness output delegate for file output ๐TAP::Formatter::File::Sessionโ harness output delegate for file output ๐
โฆand we're back, bestie โ still deep in the module directory, still not skipping a single one ๐ we finish what we start around here.
TAP::Formatter::Sessionโ the abstract base class for a harness output delegate. it's the blueprint, the "implement me yourself" energy ๐TAP::Harnessโ runs your test scripts and hands you the statistics while it's at it ๐TAP::Harness::Envโ parses harness-related environmental variables, where appropriate ๐ซถTAP::Objectโ the base class handing out common functionality to everyTAP::*module. the mom of the whole family ๐TAP::Parserโ parses TAP output. that's the gig, that's the whole job ๐ฅTAP::Parser::Aggregatorโ aggregatesTAP::Parserresults ๐ธTAP::Parser::Grammarโ a grammar for the Test Anything Protocol. the literal rulebook ๐TAP::Parser::Iteratorโ base class for TAP source iteratorsTAP::Parser::Iterator::Arrayโ iterator for array-based TAP sourcesTAP::Parser::Iterator::Processโ iterator for process-based TAP sourcesTAP::Parser::Iterator::Streamโ iterator for filehandle-based TAP sourcesTAP::Parser::IteratorFactoryโ works out which SourceHandler objects to use for a given Source ๐งTAP::Parser::Multiplexerโ multiplexes multipleTAP::Parsers. several parsers, one glow โจTAP::Parser::Resultโ base class forTAP::Parseroutput objectsTAP::Parser::Result::Bailoutโ bailout result token.TAP::Parser::Result::Commentโ comment result token.TAP::Parser::Result::Planโ plan result token.TAP::Parser::Result::Pragmaโ TAP pragma token.TAP::Parser::Result::Testโ test result token.TAP::Parser::Result::Unknownโ unknown result token. it's giving mystery ๐TAP::Parser::Result::Versionโ TAP syntax version token.TAP::Parser::Result::YAMLโ YAML result token.TAP::Parser::ResultFactoryโ the factory for creatingTAP::Parseroutput objects ๐ญTAP::Parser::Schedulerโ schedules tests during parallel testingTAP::Parser::Scheduler::Jobโ a single testing job.TAP::Parser::Scheduler::Spinnerโ a no-op job. literally doing nothing and doing it flawlessly ๐TAP::Parser::Sourceโ a TAP source, plus meta data about itTAP::Parser::SourceHandlerโ base class for the different TAP source handlersTAP::Parser::SourceHandler::Executableโ streams output from an executable TAP sourceTAP::Parser::SourceHandler::Fileโ streams TAP from a text file.TAP::Parser::SourceHandler::Handleโ streams TAP from anIO::Handleor aGLOB.TAP::Parser::SourceHandler::Perlโ streams TAP from a Perl executableTAP::Parser::SourceHandler::RawTAPโ streams output from raw TAP sitting in a scalar/array ref.TAP::Parser::YAMLish::Readerโ reads YAMLish data from an iteratorTAP::Parser::YAMLish::Writerโ writes YAMLish dataTerm::ANSIColorโ colors your screen output using ANSI escape sequences ๐ the original glow-upTerm::Capโ the Perl termcap interfaceTerm::Completeโ the Perl word completion moduleTerm::ReadLineโ the Perl interface to the variousreadlinepackages.Term::Tableโ formats a header and rows into a tableTerm::Table::Cellโ representation of a cell in a table.Term::Table::CellStackโ combines several cells into one (vertically) ๐ฅTerm::Table::HashBaseโ builds hash-based classes.Term::Table::LineBreakโ breaks up lines for use in tables.Term::Table::Utilโ utilities forTerm::Table.Testโ provides a simple framework for writing test scriptsTest2โ a framework for writing test tools that all work together ๐คTest2::APIโ the primary interface for writing Test2-based testing tools.Test2::API::Breakageโ what breaks at what version ๐ genuinely useful, nglTest2::API::Contextโ an object to represent a testing context.Test2::API::Instanceโ the objectTest2::APIuses under the hood ๐๏ธTest2::API::InterceptResultโ representation of a list of events.Test2::API::InterceptResult::Eventโ representation of an event, for use inโฆ (the line just stops there, bestie, i'm not inventing the rest ๐)Test2::API::InterceptResult::Hubโ the hub used by InterceptResult.Test2::API::InterceptResult::Squasherโ encapsulation of the algorithm thatโฆ ๐ (again, cut off)Test2::API::Stackโ an object to manage a stack ofTest2::HubTest2::AsyncSubtestโ an object representing an async subtest.Test2::AsyncSubtest::Event::Attachโ the event that attaches a subtest to the parent.Test2::AsyncSubtest::Event::Detachโ the event that detaches a subtest from the parent.Test2::AsyncSubtest::Hubโ the hub used by async subtests.Test2::Bundleโ documentation for bundles.Test2::Bundle::Extendedโ the old name forTest2::V0. it rebranded, we still respect it โจTest2::Bundle::Moreโ ALMOST a drop-in replacement forTest::More. read that word again bestie ๐Test2::Bundle::Simpleโ ALMOST a drop-in replacement forTest::Simple.Test2::Compareโ a Test2 extension for writing deep comparison tools.Test2::Compare::Arrayโ internal representation of an array comparison.Test2::Compare::Bagโ internal representation of a bag comparison.Test2::Compare::Baseโ base class for comparison classes.Test2::Compare::Boolโ compares two values as booleansTest2::Compare::Customโ a custom field check for comparisons.Test2::Compare::DeepRefโ ref comparisonTest2::Compare::Deltaโ representation of the differences between nested dataTest2::Compare::Eventโ an event-specificObjectsubclass.Test2::Compare::EventMetaโ the meta class for events in deep comparisonsTest2::Compare::Floatโ compares two values as numbers, with tolerance.Test2::Compare::Hashโ representation of a hash in a deep comparison.Test2::Compare::Isaโ checks whether the value is an instance of the class.Test2::Compare::Metaโ the check library for meta-checksTest2::Compare::Negatableโ a poor man's 'role' for compare objects that can be negated.Test2::Compare::Numberโ compares two values as numbersTest2::Compare::Objectโ representation of an object during deepโฆ (yep, cut off again ๐)Test2::Compare::OrderedSubsetโ internal representation of an ordered subset.Test2::Compare::Patternโ use a pattern to validate values in a deepโฆ (and that's where it ends ๐ธ)Test2::Compare::Refโ ref comparisonTest2::Compare::Regexโ direct regex comparisonTest2::Compare::Scalarโ representation of a Scalar Ref in deepโฆ (cut off, sigh ๐ญ)Test2::Compare::Setโ allows a field to be matched against a set ofโฆ (cut off, you know the drill)Test2::Compare::Stringโ compares two values as stringsTest2::Compare::Undefโ checks that something is undefinedTest2::Compare::Wildcardโ placeholder check.Test2::Envโ documentation for the environment variables used or set by Test2.Test2::Eventโ base class for eventsTest2::Event::Bailโ bailout! ๐จTest2::Event::Diagโ the diag event typeTest2::Event::Encodingโ sets the encoding for the output streamTest2::Event::Exceptionโ the exception eventTest2::Event::Failโ the event for a simple failed assertionTest2::Event::Genericโ generic event type.Test2::Event::Noteโ the note event typeTest2::Event::Okโ the ok event typeTest2::Event::Passโ the event for a simple passing assertion โจTest2::Event::Planโ the event of a planTest2::Event::Skipโ the skip event typeTest2::Event::Subtestโ the event for subtest typesTest2::Event::TAP::Versionโ the event for TAP version.Test2::Event::V2โ second generation event. the sequel ๐ฌTest2::Event::Waitingโ tells all procs/threads it's time to be doneTest2::EventFacetโ base class for all event facets.Test2::EventFacet::Aboutโ facet with event details.Test2::EventFacet::Amnestyโ facet for assertion amnesty.Test2::EventFacet::Assertโ facet representing an assertion.Test2::EventFacet::Controlโ facet for hub actions and behaviors.Test2::EventFacet::Errorโ facet for errors that need to be shown.Test2::EventFacet::Hubโ facet for the hubs an event passes through.Test2::EventFacet::Infoโ facet for information a developer might care about.Test2::EventFacet::Info::Tableโ intermediary representation of a table.Test2::EventFacet::Metaโ facet for meta-dataTest2::EventFacet::Parentโ facet for events that contain other eventsTest2::EventFacet::Planโ facet for setting the planTest2::EventFacet::Renderโ facet that dictates how to render an event.Test2::EventFacet::Traceโ debug information for eventsTest2::Formatterโ the namespace for formatters.Test2::Formatter::TAPโ the standard TAP formatterTest2::Formatter::TAPโ yep, still the standard TAP formatter, no capTest2::Hubโ the conduit through which all events flow ๐Test2::Hub::Interceptorโ the hub the interceptor uses to grab results.Test2::Hub::Interceptor::Terminatorโ exception class used byโฆ (cut off, bestie ๐)Test2::Hub::Subtestโ the hub used by subtestsTest2::IPCโ turns on IPC for threading or forking support.Test2::IPC::Driverโ base class for Test2 IPC drivers.Test2::IPC::Driver::Filesโ the temp dir + files concurrency model.Test2::Manualโ the documentation hub for Test2 and Test2-Suite.Test2::Manual::Anatomyโ the hub for documentation of the inner workings ofโฆ (yeah, it just ends there)Test2::Manual::Anatomy::APIโ internals documentation for the API.Test2::Manual::Anatomy::Contextโ internals documentation for the ContextTest2::Manual::Anatomy::EndToEndโ an overview of Test2 from load to finish.Test2::Manual::Anatomy::Eventโ the internals of eventsTest2::Manual::Anatomy::Hubsโ internals documentation for the hub stack, andโฆ (cut off, of course)Test2::Manual::Anatomy::IPCโ the manual for the IPC system.Test2::Manual::Anatomy::Utilitiesโ an overview of the utilities for Test2.Test2::Manual::Concurrencyโ documentation for the Concurrency support.Test2::Manual::Contributingโ how to contribute to the Test2 project ๐ซถ yes pleaseTest2::Manual::Testingโ the hub for everything about writing tests with Test2. start here, bestie, it's giving table of contents energy ๐Test2::Manual::Testing::Introductionโ your intro to testing with Test2. the tutorial that holds your hand, no cap ๐ซถTest2::Manual::Testing::Migratingโ how to migrate existing tests fromTest2::Manual::Testing::Planningโ the many ways to set a plan. yes there's more than one way, it's Perl, of course there is ๐Test2::Manual::Testing::Todoโ tutorial for marking tests as TODO. "not today, bestie" but in code โจTest2::Manual::Toolingโ the manual page for tool authors. if you're building the thing, this one's yours ๐Test2::Manual::Tooling::FirstToolโ write your first tool with Test2. baby's first tool, so proud ๐ญTest2::Manual::Tooling::Formatterโ how to write a custom formatter, in ourTest2::Manual::Tooling::Nestingโ tutorial for using other tools within yourTest2::Manual::Tooling::Plugin::TestExitโ how to safely add pre-exitTest2::Manual::Tooling::Plugin::TestingDoneโ run code when the test file isTest2::Manual::Tooling::Plugin::ToolCompletesโ how to add behaviors that occurTest2::Manual::Tooling::Plugin::ToolStartsโ how to add behaviors that occurTest2::Manual::Tooling::Subtestโ how to implement a tool that makes use ofTest2::Manual::Tooling::TestBuilderโ this section mapsTest::BuildermethodsTest2::Manual::Tooling::Testingโ tutorial on how to test your testing tools. testing-ception, we love to see it ๐ฅ
Test2::Mockโ module for managing mocked classes and instances. fake it till you make it, but make it intentional ๐Test2::Pluginโ documentation for pluginsTest2::Plugin::BailOnFailโ automatically bail out of testing on the first testTest2::Plugin::DieOnFailโ automatically die on the first test failure. dramatic? yes. useful? also yes ๐Test2::Plugin::ExitSummaryโ add extra diagnostics on failure at the end of theTest2::Plugin::SRandโ control the random seed for more controlled testTest2::Plugin::Timesโ output timing data at the end of the test. so you can see exactly how slow everything is โฑ๏ธTest2::Plugin::UTF8โ Test2 plugin to test with utf8. emoji-safe testing, iconic ๐Test2::Requireโ base class and documentation for skip-unless type testTest2::Require::AuthorTestingโ only run a test when theAUTHOR_TESTINGTest2::Require::AutomatedTestingโ only run a test when theAUTOMATED_TESTINGTest2::Require::EnvVarโ only run a test when a specific environment variableTest2::Require::ExtendedTestingโ only run a test when theEXTENDED_TESTINGTest2::Require::Forkโ skip a test file unless the system supports forkingTest2::Require::Moduleโ skip tests if certain packages are not installed, orTest2::Require::NonInteractiveTestingโ only run a test when theNONINTERACTIVE_TESTINGTest2::Require::Perlโ skip the test unless the necessary version of Perl isTest2::Require::RealForkโ skip a test file unless the system supports trueTest2::Require::ReleaseTestingโ only run a test when theRELEASE_TESTINGTest2::Require::Threadsโ skip a test file unless the system supports threadingTest2::Suiteโ distribution with a rich set of tools built upon the Test2Test2::Todoโ TODO extension for Test2. ๐Test2::Toolsโ documentation for Tools.
Test2::Tools::AsyncSubtestโ tools for writing async subtests. multitasking but make it tests ๐ฆTest2::Tools::Basicโ Test2 implementation of the basic testing tools.Test2::Tools::Classโ Test2 implementation of the tools for testing classes.Test2::Tools::ClassicCompareโ classic (Test::Morestyle) comparison tools.Test2::Tools::Compareโ tools for comparing deep data structures. deep-dive comparison, no surface-level vibes here ๐Test2::Tools::Deferโ write tests that get executed at a later timeTest2::Tools::Encodingโ tools for managing the encoding of Test2 basedTest2::Tools::Eventโ tools for generating test events.Test2::Tools::Exceptionโ Test2 based tools for checking exceptionsTest2::Tools::Exportsโ tools for validating exporters.Test2::Tools::GenTempโ tool for generating a populated temp directory. ๐Test2::Tools::Grabโ temporarily intercept all events without adding a scopeTest2::Tools::Mockโ class/instance mocking for Test2.Test2::Tools::Refโ tools for validating references.Test2::Tools::Specโ RSPEC implementation on top ofTest2::WorkflowTest2::Tools::Subtestโ tools for writing subtestsTest2::Tools::Targetโ alias the testing target package.Test2::Tools::Testerโ tools to help you test other testing tools. (yes, again. it's turtles all the way down ๐ข)Test2::Tools::Tinyโ tiny set of tools for unfortunate souls who cannot useTest2::Tools::Warningsโ tools to verify warnings.Test2::Transitionโ transition notes when upgrading to Test2Test2::Utilโ tools used by Test2 and friends.Test2::Util::ExternalMetaโ allow third party tools to safely attach meta-dataTest2::Util::Facets2Legacyโ convert facet data to the legacy event API.Test2::Util::Grabberโ object used to temporarily intercept all events.Test2::Util::Guardโ inline copy ofScope::GuardTest2::Util::HashBaseโ build hash based classes.Test2::Util::Importerโ inline copy ofImporter.Test2::Util::Refโ tools for inspecting or manipulating references.Test2::Util::Sigโ signal tools used by Test2 and friends.Test2::Util::Stashโ utilities for manipulating stashes and globs.Test2::Util::Subโ tools for inspecting and manipulating subs.Test2::Util::Tableโ format a header and rows into a tableTest2::Util::Table::LineBreakโ break up lines for use in tables.Test2::Util::Timesโ format timing/benchmark information.Test2::Util::Traceโ legacy wrapper forTest2::EventFacet::Trace.Test2::V0โ0Thedition of the Test2 recommended bundle. yes,0Th, that's the actual string, don't come for me ๐ญTest2::Workflowโ a test workflow is a way of structuring tests usingTest2::Workflow::BlockBaseโ base class for all workflow blocks.Test2::Workflow::Buildโ represents a build in progress.Test2::Workflow::Runnerโ runs the workflows.Test2::Workflow::Taskโ encapsulation of a TaskTest2::Workflow::Task::Actionโ encapsulation of an action.Test2::Workflow::Task::Groupโ encapsulation of a group (describe).
Test::Builderโ backend for building test librariesTest::Builder::FormatterโTest::Buildersubclass ofTest2::Formatter::TAPTest::Builder::Moduleโ base class for test modulesTest::Builder::Testerโ test testsuites that have been built withTest::Builder::Tester::Colorโ turn on colour inTest::Builder::Tester๐จTest::Builder::TodoDiagโTest::Buildersubclass ofTest2::Event::DiagTest::Harnessโ run Perl standard test scripts with statisticsTest::Harness::Beyondโ beyondmake testTest::Moreโ yet another framework for writing test scriptsTest::Simpleโ basic utilities for writing tests.Test::Testerโ ease testing test modules built withTest::BuilderTest::Tester::Captureโ help testing test modules built withTest::BuilderTest::Tester::CaptureRunnerโ help testing test modules built withTest::BuilderTest::Tutorialโ a tutorial about writing really basic testsTest::use::okโ alternative toTest::More::use_okText::Abbrevโ Abbrev - create an abbreviation table from a listText::Balancedโ extract delimited text sequences from strings.Text::ParseWordsโ parse text into an array of tokens or array of arraysText::Tabsโ expand and unexpand tabs like unixexpand(1)andunexpand(1)Text::Wrapโ line wrapping to form simple paragraphsThreadโ manipulate threads in Perl (for old code only). old code only, okay? legacy behaviour, don't start new stuff here ๐ซThread::Queueโ thread-safe queuesThread::Semaphoreโ thread-safe semaphoresTie::Arrayโ base class for tied arraysTie::Fileโ access the lines of a disk file via a Perl arrayTie::Handleโ base class definitions for tied handlesTie::Hashโ base class definitions for tied hashesTie::Hash::NamedCaptureโ named regexp capture buffersTie::Memoizeโ add data to hash when needed. lazy loading but for hashes, lowkey genius โจTie::RefHashโ use references as hash keysTie::Scalarโ base class definitions for tied scalarsTie::StdHandleโ base class definitions for tied handlesTie::SubstrHashโ fixed-table-size, fixed-key-length hashingTime::HiResโ high resolution alarm, sleep, gettimeofday, interval timers โฐTime::Localโ efficiently compute time from local and GMT timeTime::Pieceโ object oriented time objectsTime::Secondsโ a simple API to convert seconds to other date valuesTime::gmtimeโ by-name interface to Perl's built-ingmtime()functionTime::localtimeโ by-name interface to Perl's built-inlocaltime()functionTime::tmโ internal object used byTime::gmtimeandTime::localtimeUNIVERSALโ base class for ALL classes (blessed references) ๐Unicode::Collateโ Unicode Collation AlgorithmUnicode::Collate::CJK::Big5โ weighting CJK Unified IdeographsUnicode::Collate::CJK::GB2312โ weighting CJK Unified IdeographsUnicode::Collate::CJK::JISX0208โ weighting JIS KANJI forUnicode::CollateUnicode::Collate::CJK::Koreanโ weighting CJK Unified IdeographsUnicode::Collate::CJK::Pinyinโ weighting CJK Unified IdeographsUnicode::Collate::CJK::Strokeโ weighting CJK Unified IdeographsUnicode::Collate::CJK::Zhuyinโ weighting CJK Unified IdeographsUnicode::Collate::Localeโ linguistic tailoring for DUCET viaUnicode::CollateUnicode::Normalizeโ Unicode Normalization FormsUnicode::UCDโ Unicode character database ๐User::grentโ by-name interface to Perl's built-ingetgr*()functionsUser::pwentโ by-name interface to Perl's built-ingetpw*()functionsVMS::DCLsymโ Perl extension to manipulate DCL symbolsVMS::Filespecโ the translator bestie between VMS and Unix file spec syntax, so the two can finally understand each other ๐VMS::Stdioโ standard I/O functions, but via VMS extensions โจWin32โ interfaces to some Win32 API functions ๐ชWin32API::Fileโ low-level access to Win32 system API calls for files and dirs, no capWin32COREโ Win32 CORE function stubs, just little guys doing their job ๐ซถXS::APItestโ here to test the perl C API, she's the guinea pig and she's slayingXS::Typemapโ the module that tests the XS typemaps that ship with perl ๐ฅXSLoaderโ dynamically loads C libraries into Perl code, iconic behaviorautodie::Scope::Guardโ a wrapper class for calling subs at the end of scope ๐ธautodie::Scope::GuardStackโ the hook stack that manages scopes via%^H, lowkey doing the mostautodie::Utilโ internal utility subroutines forautodieandFatal(iykyk, it's an internal thing)version::Internalsโ a Perl extension for Version Objects, the lore behind versioning ๐
okay so if you wanna find every module installed on your system โ even the ones with no docs or that live outside the standard release โ just run this. (Heads up bestie: under the default win32 shell, use double quotes instead of single quotes, fr fr.)
% perl -MFile::Find=find -MFile::Spec::Functions -Tlwe \
'find { wanted => sub { print canonpath $_ if /\.pm\z/ },
no_chdir => 1 }, @INC'
(The -T is there to stop @INC from getting populated by "PERL5LIB", "PERLLIB", and "PERL_USE_UNSAFE_INC".) They should all have their own documentation installed and accessible via your system's man(1) command. No find program? Use the Perl find2perl program instead โ it generates Perl code as output that you can run through perl. Got a man program but it's not finding your modules? You're gonna have to fix your manpath, sorry babe. See perl for details. And if you have no system man command at all, try the perldoc program instead ๐
Also note: the command perldoc perllocal gives you a (possibly incomplete) list of the modules that have been further installed on your system. (The perllocal.pod file gets updated by the standard MakeMaker install process.) ๐
๐ฆ Extension Modules ๐ฆ
Extension modules are written in C (or a mix of Perl and C). They usually get dynamically loaded into Perl if and when you need them, but they can also be linked in statically. Supported extension modules include Socket, Fcntl, and POSIX โ yes, those three, they're the certified ones ๐
So many popular C extension modules are not bundled (or at least not completely) because of their sizes, their volatility, or just simply nobody had the time for adequate testing and configuration across the multitude of platforms Perl was beta-tested on. You are encouraged to go look for them on CPAN (described below), or hit up web search engines like Google or DuckDuckGo ๐
๐ CPAN ๐
CPAN stands for Comprehensive Perl Archive Network โ it's a globally replicated trove of Perl materials, including documentation, style guides, tricks and traps, alternate ports to non-Unix systems, and occasional binary distributions for those too. Search engines for CPAN can be found at https://www.cpan.org/ โจ
Most importantly, CPAN includes around a thousand unbundled modules, some of which require a C compiler to build. The major categories of modules are:
- Language Extensions and Documentation Tools
- Development Support
- Operating System Interfaces
- Networking, Device Control (modems) and InterProcess Communication
- Data Types and Data Type Utilities
- Database Interfaces
- User Interfaces
- Interfaces to / Emulations of Other Programming Languages
- File Names, File Systems and File Locking (see also File Handles)
- String Processing, Language Text Processing, Parsing, and Searching
- Option, Argument, Parameter, and Configuration File Processing
- Internationalization and Locale
- Authentication, Security, and Encryption
- World Wide Web, HTML, HTTP, CGI, MIME
- Server and Daemon Utilities
- Archiving and Compression
- Images, Pixmap and Bitmap Manipulation, Drawing, and Graphing
- Mail and Usenet News
- Control Flow Utilities (callbacks and exceptions etc)
- File Handle and Input/Output Stream Utilities
- Miscellaneous Modules
You can find the CPAN online at <https://www.cpan.org/> ๐
๐ Modules: Creation, Use, and Abuse ๐
(The following section is borrowed directly from Tim Bunce's modules file, available at your nearest CPAN site. Credit where credit is due, bestie ๐)
So here's the tea on how Perl actually does classes: Perl implements a class using a package, but the presence of a package does not imply the presence of a class. A package is just a namespace. A class is a package that provides subroutines usable as methods. And a method is just a subroutine that expects, as its first argument, either the name of a package (for "static" methods), or a reference to something (for "virtual" methods).
A module is a file that (by convention) provides a class of the same name (sans the .pm), plus an import method in that class that can be called to fetch exported symbols. This module may implement some of its methods by loading dynamic C or C++ objects, but that should be totally transparent to the user of the module. Same deal: the module might set up an AUTOLOAD function to slurp in subroutine definitions on demand, but that's also transparent. Only the .pm file is required to exist. See perlsub, perlobj, and AutoLoader for the details about the AUTOLOAD mechanism ๐
๐ธ Guidelines for Module Creation ๐ธ
- Do similar modules already exist in some form?
If so, please try to reuse the existing modules either in whole or by inheriting useful features into a new class. If that's not practical, try to get together with the module authors and work on extending or enhancing the functionality of the existing modules. A perfect example is the plethora of packages in perl4 for dealing with command line options.
If you're writing a module to expand an already existing set of modules, please coordinate with the author of the package. It helps so much if you follow the same naming scheme and module interaction scheme as the original author ๐ซถ
- Try to design the new module to be easy to extend and reuse.
Try to use warnings; (or use warnings qw(...);). Remember that you can add no warnings qw(...); to individual blocks of code that need fewer warnings.
Use blessed references. Use the two argument form of bless to bless into the class name given as the first parameter of the constructor, e.g.,:
sub new {
my $class = shift;
return bless {}, $class;
}
or even this if you'd like it to be used as either a static or a virtual method.
sub new {
my $self = shift;
my $class = ref($self) || $self;
return bless {}, $class;
}
Pass arrays as references so more parameters can be added later (it's also faster, slay). Convert functions into methods where appropriate. Split large methods into smaller more flexible ones. Inherit methods from other modules if appropriate.
Avoid class name tests like: die "Invalid" unless ref $ref eq 'FOO'. Generally you can delete the eq 'FOO' part with no harm at all. Let the objects look after themselves! Generally, avoid hard-wired class names as far as possible.
Avoid $r->Class::func() where using @ISA=qw(... Class ...) and $r->func() would work.
Use autosplit so little used or newly added functions won't be a burden to programs that don't use them. Add test functions to the module after __END__ either using AutoSplit or by saying:
eval join('',<main::DATA>) || die $@ unless caller();
Does your module pass the 'empty subclass' test? If you say @SUBCLASS::ISA = qw(YOURCLASS); your applications should be able to use SUBCLASS in exactly the same way as YOURCLASS. For example, does your application still work if you change: $obj = YOURCLASS->new(); into: $obj = SUBCLASS->new(); ?
Avoid keeping any state information in your packages. It makes it difficult for multiple other packages to use yours. Keep state information in objects.
Always use -w.
Try to use strict; (or use strict qw(...);). Remember that you can add no strict qw(...); to individual blocks of code that need less strictness.
Always use -w.
Follow the guidelines in perlstyle.
Always use -w. (yes, it's here three times, it's THAT important ๐)
- Some simple style guidelines
The perlstyle manual supplied with Perl has many helpful points.
Coding style is a matter of personal taste. Many people evolve their style over several years as they learn what helps them write and maintain good code. Here's one set of assorted suggestions that seem to be widely used by experienced developers:
Use underscores to separate words. It is generally easier to read $var_names_like_this than $VarNamesLikeThis, especially for non-native speakers of English. It's also a simple rule that works consistently with VAR_NAMES_LIKE_THIS.
Package/Module names are an exception to this rule. Perl informally reserves lowercase module names for 'pragma' modules like integer and strict. Other modules normally begin with a capital letter and use mixed case with no underscores (need to be short and portable).
You may find it helpful to use letter case to indicate the scope or nature of a variable. For example:
$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
Function and method names seem to work best as all lowercase. e.g., $obj->as_string().
You can use a leading underscore to indicate that a variable or function should not be used outside the package that defined it. (It's giving "private, do not touch" ๐ )
- Select what to export.
Do NOT export method names!
Do NOT export anything else by default without a good reason!
Exports pollute the namespace of the module user. If you must export, try to use @EXPORT_OK in preference to @EXPORT and avoid short or common names to reduce the risk of name clashes. That's the vibe check right there ๐
Generally anything not exported is still accessible from outside the module using the ModuleName::item_name (or $blessed_ref->method) syntax. By convention you can use a leading underscore on names to indicate informally that they are 'internal' and not for public use.
(It is actually possible to get private functions by saying: my $subref = sub { ... }; &$subref;. But there's no way to call that directly as a method, because a method must have a name in the symbol table.) ๐ญ that's just how it is
- As a general rule, if the module is trying to be object oriented then export nothing. If it's just a lil collection of functions then
@EXPORT_OKanything, but use@EXPORTwith caution bestie, fr fr. ๐ - Select a name for the module.
This name should be as descriptive, accurate, and complete as possible. Avoid any risk of ambiguity. Always try to use two or more whole words. Generally the name should reflect what is special about what the module does rather than how it does it. Please use nested module names to group informally or categorize a module. There should be a very good reason for a module not to have a nested name. Module names should begin with a capital letter. ๐
Having 57 modules all called Sort will not make life easy for anyone (though having 23 called Sort::Quick is only marginally better :-). Imagine someone trying to install your module alongside many others. ๐ญ
If you are developing a suite of related modules/classes it's good practice to use nested classes with a common prefix as this will avoid namespace clashes. For example: Xyz::Control, Xyz::View, Xyz::Model etc. Use the modules in this list as a naming guide.
If adding a new module to a set, follow the original author's standards for naming modules and the interface to methods in those modules.
If developing modules for private internal or project specific use, that will never be released to the public, then you should ensure that their names will not clash with any future public module. You can do this either by using the reserved Local::* category or by using a category name that includes an underscore like Foo_Corp::*. ๐ซถ
To be portable each component of a module name should be limited to 11 characters. If it might be used on MS-DOS then try to ensure each is unique in the first 8 characters. Nested modules make this easier.
For additional guidance on the naming of modules, please consult:
https://pause.perl.org/pause/query?ACTION=pause_namingmodules
or send mail to the <module-authors@perl.org> mailing list.
- Have you got it right?
How do you know that you've made the right decisions? Have you picked an interface design that will cause problems later? Have you picked the most appropriate name? Do you have any questions? ๐ฆ
The best way to know for sure, and pick up many helpful suggestions, is to ask someone who knows. The <module-authors@perl.org> mailing list is useful for this purpose; it's also accessible via news interface as perl.module-authors at nntp.perl.org.
All you need to do is post a short summary of the module, its purpose and interfaces. A few lines on each of the main methods is probably enough. (If you post the whole module it might be ignored by busy people - generally the very people you want to read it!) ๐
Don't worry about posting if you can't say when the module will be ready - just say so in the message. It might be worth inviting others to help you, they may be able to complete it for you! โจ
- README and other Additional Files.
It's well known that software developers usually fully document the software they write. If, however, the world is in urgent need of your software and there is not enough time to write the full documentation please at least provide a README file containing:
- A description of the module/package/extension etc.
- A copyright notice - see below.
- Prerequisites - what else you may need to have.
- How to build it - possible changes to
Makefile.PLetc. - How to install it.
- Recent changes in this release, especially incompatibilities
- Changes / enhancements you plan to make in the future.
If the README file seems to be getting too large you may wish to split out some of the sections into separate files: INSTALL, Copying, ToDo etc.
- Adding a Copyright Notice.
How you choose to license your work is a personal decision. The general mechanism is to assert your Copyright and then make a declaration of how others may copy/use/modify your work. ๐
Perl, for example, is supplied with two types of licence: The GNU GPL and The Artistic Licence (see the files README, Copying, and Artistic, or perlgpl and perlartistic). Larry has good reasons for NOT just using the GNU GPL.
My personal recommendation, out of respect for Larry, Perl, and the Perl community at large is to state something simply like:
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.
This statement should at least appear in the README file. You may also wish to include it in a Copying file and your source files. Remember to include the other words in addition to the Copyright. ๐
- Give the module a version/issue/release number.
To be fully compatible with the Exporter and MakeMaker modules you should store your module's version number in a non-my package variable called $VERSION. This should be a positive floating point number with at least two digits after the decimal (i.e., hundredths, e.g., "$VERSION = "0.01""). Don't use a "1.3.2" style version. See Exporter for details.
It may be handy to add a function or method to retrieve the number. Use the number in announcements and archive file names when releasing the module (ModuleName-1.02.tar.Z). See perldoc ExtUtils::MakeMaker.pm for details.
- How to release and distribute a module.
If possible, register the module with CPAN. Follow the instructions and links on:
https://www.cpan.org/modules/04pause.html
and upload to:
https://pause.perl.org/
and notify <modules@perl.org>. This will allow anyone to install your module using the cpan tool distributed with Perl. ๐ฅ
By using the WWW interface you can ask the Upload Server to mirror your modules from your ftp or WWW site into your own directory on CPAN!
- Take care when changing a released module.
Always strive to remain compatible with previous released versions. Otherwise try to add a mechanism to revert to the old behavior if people rely on it. Document incompatible changes. โ ๏ธ
๐ Guidelines for Converting Perl 4 Library Scripts into Modules ๐
- There is no requirement to convert anything.
If it ain't broke, don't fix it! Perl 4 library scripts should continue to work with no problems. You may need to make some minor changes (like escaping non-array @'s in double quoted strings) but there is no need to convert a .pl file into a Module for just that.
- Consider the implications.
All Perl applications that make use of the script will need to be changed (slightly) if the script is converted into a module. Is it worth it unless you plan to make other changes at the same time? ๐ค
- Make the most of the opportunity.
If you are going to convert the script to a module you can use the opportunity to redesign the interface. The guidelines for module creation above include many of the issues you should consider.
- The
pl2pmutility will get you started.
This utility will read *.pl files (given as parameters) and write corresponding *.pm files. The pl2pm utilities does the following:
- Adds the standard Module prologue lines
- Converts package specifiers from
'to:: - Converts
die(...)tocroak(...) - Several other minor changes
Being a mechanical process pl2pm is not bullet proof. The converted code will need careful checking, especially any package statements. Don't delete the original .pl file till the new .pm one works! ๐
๐ง Guidelines for Reusing Application Code ๐ง
- Complete applications rarely belong in the Perl Module Library.
- Many applications contain some Perl code that could be reused.
Help save the world! Share your code in a form that makes it easy to reuse. ๐ธ
- Break-out the reusable code into one or more separate module files.
- Take the opportunity to reconsider and redesign the interfaces.
- In some cases the
'application'can then be reduced to a small fragment of code built on top of the reusable modules. In these cases the application could invoked as:
% perl -e 'use Module::Name; method(@ARGV)' ...
or
% perl -mModule::Name ... (in perl5.002 or higher)
๐ NOTE ๐
Perl does not enforce private and public parts of its modules as you may have been used to in other languages like C++, Ada, or Modula-17. Perl doesn't have an infatuation with enforced privacy. It would prefer that you stayed out of its living room because you weren't invited, not because it has a shotgun. ๐
The module and its user have a contract, part of which is common law, and part of which is "written". Part of the common law contract is that a module doesn't pollute any namespace it wasn't asked to. The written contract for the module (A.K.A. documentation) may make other provisions. But then you know when you use RedefineTheWorld that you're redefining the world and willing to take the consequences. ๐
okay bestie that's literally the whole page, you ate it up ๐
This was perl v5.42.3, dated 2026-08-03, filed under PERLMODLIB(1) โ go forth and name your modules something cute and non-clashing, mwah ๐ซถโจ
๐ฆ where this page comes from
- fedora 43: perl-doc 5.42.3-524.fc43 ยท (GPL-1.0-or-later OR Artistic-1.0-Perl) AND Unicode-3.0 AND LicenseRef-Fedora-UltraPermissive
- fedora 44: perl-doc 5.42.3-525.fc44 ยท (GPL-1.0-or-later OR Artistic-1.0-Perl) AND Unicode-3.0 AND LicenseRef-Fedora-UltraPermissive
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms