PERLMODLIB(1perl)
๐ perlmodlib(1perl) ๐
Perl Programmers Reference Guide
โจ NAME โจ
perlmodlib โ constructing new Perl modules and finding existing ones ๐ซถ
๐ THE PERL MODULE LIBRARY ๐
okay so like, the Perl distribution comes with SO many modules, and they're all described down below. they all end in .pm ๐
. you might also stumble upon compiled library files (usually ending in .so) or little bits of modules that get autoloaded (ending in .al) โ those were auto-generated when you installed stuff. you might also see files in the library directory ending in .pl or .ph. these are like, the old-school libraries kept around so your ancient programs still run. the .pl files are gonna get converted into standard modules eventually, and the .ph files made by h2ph will probably become extension modules made by h2xs. (some .ph values might already be available through the POSIX, Errno, or Fcntl modules.) the pl2pm file in the distribution can help you convert, but it's just a mechanical process so it's far from bulletproof ๐.
๐ง Pragmatic Modules ๐ง
so these work kinda like compiler directives (pragmata) โ they mess with how your program compiles, so you usually gotta use them inside a use or no. most of them are lexically scoped, which means an inner BLOCK can override them by saying:
no integer;
no strict 'refs';
no warnings;
and that lasts until the end of that BLOCK โจ.
some pragmas are lexically scoped โ typically the ones that mess with the $^H hints variable. others affect the current package instead, like use vars and use subs, which let you predeclare variables or subroutines for a whole file, not just a block. those declarations stick for the entire file they're declared in. and you can't take them back with no vars or no subs ๐
โโ๏ธ.
here are all the defined pragmas (they each have their own docs, too) ๐
attributesโ get/set subroutine or variable attributes ๐autodieโ replaces functions with ones that either succeed or die, with lexical scope ๐autodie::exceptionโ exceptions from autodying functions. ๐ญautodie::exception::systemโ exceptions from autodyingsystem(). ๐ฅ๏ธautodie::hintsโ provide hints about user subroutines to autodie ๐งautodie::skipโ skip a package when throwing autodie exceptions ๐autouseโ postpone load of modules until a function is used โณbaseโ establish an ISA relationship with base classes at compile time ๐bigfloatโ transparent big floating point number support for Perl ๐bigintโ transparent big integer support for Perl ๐ขbignumโ transparent big number support for Perl ๐ขbigratโ transparent big rational number support for Perl ๐งฎblibโ use MakeMaker's uninstalled version of a package ๐ฆbuiltinโ import built-in utility functions ๐ ๏ธbytesโ expose the individual bytes of characters ๐คcharnamesโ access to Unicode character names and named character sequences; also define character names ๐ท๏ธconstantโ declare constants ๐deprecateโ Perl pragma for deprecating the inclusion of a module in core ๐ซdiagnosticsโ produce verbose warning diagnostics ๐ขencodingโ allows you to write your script in non-ASCII and non-UTF-8 ๐encoding::warningsโ warn on implicit encoding conversions โ ๏ธexperimentalโ experimental features made easy ๐งชfeatureโ enable new features โจfieldsโ compile-time class fields ๐๏ธfiletestโ control the filetest permission operators ๐ifโusea Perl module if a condition holds ๐คintegerโ use integer arithmetic instead of floating point ๐ขlessโ request less of something ๐คlibโ manipulate@INCat compile time ๐localeโ use or avoid POSIX locales for built-in operations ๐mroโ Method Resolution Order ๐okโ alternative toTest::More::use_okโopenโ set default PerlIO layers for input and output ๐opsโ restrict unsafe operations when compiling ๐งoverloadโ package for overloading Perl operations ๐ญoverloadingโ lexically control overloading ๐parentโ establish an ISA relationship with base classes at compile time ๐ชreโ alter regular expression behaviour ๐sigtrapโ enable simple signal handling ๐จsortโ controlsort()behaviour ๐คsource::encodingโ declare Perl source code encoding ๐stableโ experimental features made easy, once we know they're stable ๐๏ธstrictโ restrict unsafe constructs ๐ซsubsโ predeclare subroutine names ๐threadsโ Perl interpreter-based threads ๐งตthreads::sharedโ Perl extension for sharing data structures between threads ๐คutf8โ enable/disable UTF-8 (or UTF-EBCDIC) in source code ๐varsโ predeclare global variable names ๐versionโ Perl extension for Version Objects ๐ฆvmsishโ control VMS-specific language features ๐ฅ๏ธwarningsโ control optional warnings โ ๏ธwarnings::registerโ warnings import function ๐ฅ
๐ฆ Standard Modules ๐ฆ
these standard, bundled modules are all supposed to behave super well and not pollute namespaces because they use the Exporter module. check their own docs for the tea โ.
just a heads up: not all of these might be installed on your system. like, GDBM_File won't be there if you don't have the gdbm library ๐
.
Amiga::ARexxโ Perl extension for ARexx support ๐๏ธAmiga::Execโ Perl extension for low level amiga support ๐ฅ๏ธAnyDBM_Fileโ provide framework for multiple DBMs ๐๏ธApp::Cpanโ easily interact with CPAN from the command line ๐ปApp::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 archives ๐ฆArchive::Tar::Fileโ a subclass for in-memory extracted file fromArchive::Tar๐Attribute::Handlersโ simpler definition of attribute handlers ๐ท๏ธAutoLoaderโ load subroutines only on demand โณAutoSplitโ split a package for autoloading โ๏ธBโ the Perl Compiler Backend ๐งB::Conciseโ walk Perl syntax tree, printing concise info about ops ๐ณB::Deparseโ Perl compiler backend to produce perl code ๐B::Op_privateโ OP op_private flag definitions ๐ฉB::Showlexโ show lexical variables used in functions or files ๐B::Terseโ walk Perl syntax tree, printing terse info about ops ๐ฒB::Xrefโ generates cross reference reports for Perl programs ๐Benchmarkโ benchmark running times of Perl code โฑ๏ธCOREโ namespace for Perl's core routines ๐งฌCPANโ query, download and build perl modules from CPAN sites ๐CPAN::API::HOWTOโ a recipe book for programming with CPAN.pm ๐CPAN::Debugโ internal debugging for CPAN.pm ๐CPAN::Distroprefsโ read and match distroprefs ๐CPAN::FirstTimeโ utility for CPAN::Config file Initialization โ๏ธCPAN::HandleConfigโ internal configuration handling for CPAN.pm ๐ ๏ธCPAN::Kwalifyโ interface between CPAN.pm and Kwalify.pm ๐CPAN::Metaโ the distribution metadata for a CPAN dist ๐CPAN::Meta::Converterโ convert CPAN distribution metadata structures ๐CPAN::Meta::Featureโ an optional feature provided by a CPAN distribution โจCPAN::Meta::Historyโ history of CPAN Meta Spec changes ๐CPAN::Meta::History::Meta_1_0โ version 1.0 metadata specification for META.yml ๐CPAN::Meta::History::Meta_1_1โ version 1.1 metadata specification for META.yml ๐CPAN::Meta::History::Meta_1_2โ version 1.2 metadata specification for META.yml ๐CPAN::Meta::History::Meta_1_3โ version 1.3 metadata specification for META.yml ๐CPAN::Meta::History::Meta_1_4โ version 1.4 metadata specification for META.yml ๐CPAN::Meta::Mergeโ merging CPAN Meta fragments ๐งฉCPAN::Meta::Prereqsโ a set of distribution prerequisites by phase and type ๐CPAN::Meta::Requirementsโ a set of version requirements for a CPAN dist ๐CPAN::Meta::Requirements::Rangeโ a set of version requirements for a CPAN dist ๐CPAN::Meta::Specโ specification for CPAN distribution metadata ๐CPAN::Meta::Validatorโ validate CPAN distribution metadata structures โCPAN::Meta::YAMLโ read and write a subset of YAML for CPAN Meta files ๐CPAN::Noxโ wrapper around CPAN.pm without using any XS module ๐ซCPAN::Pluginโ base class for CPAN shell extensions ๐CPAN::Plugin::Specfileโ proof of concept implementation of a trivial CPAN::Plugin ๐งชCPAN::Queueโ internal queue support for CPAN.pm ๐๏ธCPAN::Tarzipโ internal handling of tar archives for CPAN.pm ๐ฆCPAN::Versionโ utility functions to compare CPAN versions ๐ขCarpโ alternative warn and die for modules ๐Class::Structโ declare struct-like datatypes as Perl classes ๐๏ธCompress::Raw::Bzip2โ low-level interface to bzip2 compression library ๐๏ธCompress::Raw::Zlibโ low-level interface to zlib or zlib-ng compression library ๐๏ธCompress::Zlibโ interface to zlib compression library ๐๏ธConfigโ access Perl configuration information โ๏ธConfig::Extensionsโ hash lookup of which core extensions were built. ๐Config::Perl::Vโ structured data retrieval of perl -V output ๐Cwdโ get pathname of current working directory ๐DBโ programmatic interface to the Perl debugging API ๐DBM_Filterโ filter DBM keys/values ๐DBM_Filter::compressโ filter for DBM_Filter ๐๏ธDBM_Filter::encodeโ filter for DBM_Filter ๐คDBM_Filter::int32โ filter for DBM_Filter ๐ขDBM_Filter::nullโ filter for DBM_Filter ๐ซDBM_Filter::utf8โ filter for DBM_Filter ๐DB_Fileโ Perl access to Berkeley DB 1.x ๐๏ธData::Dumperโ stringified perl data structures, suitable for both printing and "eval" ๐ฆDevel::PPPortโ Perl/Pollution/Portability ๐งชDevel::Peekโ a data debugging tool for the XS programmer ๐Devel::SelfStubberโ generate stubs for a SelfLoading module ๐งDigestโ modules that calculate message digests ๐Digest::MD5โ Perl interface to the MD5 Algorithm ๐Digest::SHAโ Perl extension for SHA-1/224/256/384/512 ๐Digest::baseโ Digest base class ๐งฌDigest::fileโ calculate digests of files ๐
okay so continuing the great module tour, bestie, we're literally in it now ๐
DirHandleโ (obsolete) โ throws object methods at directory handles, like a lil time capsule. it's giving legacy energy ngl ๐ซถDumpvalueโ literally dumps your Perl data to the screen so you can see what's inside. a whole data photoshoot โจDynaLoaderโ yanks C libraries into your Perl code at runtime. dynamic, dramatic, iconic ๐Encodeโ the whole character-encoding situation in Perl. the queen bee of bytes ๐Encode::Aliasโ maps aliases onto encodings. nickname registry fr fr ๐Encode::Byteโ single byte encodings. baby steps, one byte at a time ๐ธEncode::CJKConstantsโ used internally byEncode::??::ISO_2022_*. behind the scenes, no notes ๐งEncode::CNโ China-based Chinese encodings ๐จ๐ณโจEncode::CN::HZโ used internally byEncode::CN. secret helper vibes ๐Encode::Configโ used internally byEncode. the config bestie ๐Encode::EBCDICโ EBCDIC encodings, the vintage aesthetic of character sets ๐Encode::Encoderโ an object oriented encoder. main character energy fr ๐ฆEncode::Encodingโ the base class for implementing Encode stuff. it's giving foundational ๐Encode::GSM0338โ ETSI GSM 03.38 encoding. yes, the phone-texting one ๐ฑ๐Encode::Guessโ sniffs out the encoding from your data. detective mode, no cap ๐Encode::JPโ Japanese encodings ๐ฏ๐ต๐ธEncode::JP::H2Zโ used internally byEncode::JP::2022_JP*. undercover helper โจEncode::JP::JIS7โ used internally byEncode::JP. another secret agent ๐ฆEncode::KRโ Korean encodings ๐ฐ๐ท๐Encode::KR::2022_KRโ used internally byEncode::KR. living in the shadows ๐Encode::MIME::Headerโ MIME encoding for an unstructured email header. email glamour ๐Encode::MIME::Nameโ used internally byEncode. quiet lil worker bee ๐Encode::PerlIOโ a detailed document aboutEncodeandPerlIO. the lore drop ๐Encode::Supportedโ all the encodingsEncodesupports. the full roster, periodt ๐Encode::Symbolโ symbol encodings. cute and symbolic ๐Encode::TWโ Taiwan-based Chinese encodings ๐น๐ผโจEncode::Unicodeโ various Unicode Transformation Formats. UTF-everything ๐Encode::Unicode::UTF7โ UTF-7 encoding. the retro cousin ๐Englishโ lets you use nice English (orawk) names for those ugly punctuation variables. say$INPUT_RECORD_SEPARATORinstead of$/โ glow up ๐Envโ imports environment variables as scalars or arrays. your env vars, but cuter ๐ซถErrnoโ systemerrnoconstants. all the error codes, cataloged โจExporterโ implements the default import method for modules. the reasonuseactually does stuff ๐ฅExporter::Heavyโ the guts ofExporter. the internal organs, respectfully ๐ExtUtils::CBuilderโ compiles and links C code for Perl modules ๐ ๏ธExtUtils::CBuilder::Platform::Windowsโ the builder class for Windows platforms ๐ชExtUtils::Commandโ utilities to replace common UNIX commands inMakefiles etc. ๐บ๐ณExtUtils::Command::MMโ commands for the MM's to use inMakefiles. teamwork fr fr ๐คExtUtils::Constantโ generates XS code to import C header constants. code gen magic โจExtUtils::Constant::Baseโ base class forExtUtils::Constantobjects. foundation laid ๐ExtUtils::Constant::Utilsโ helper functions forExtUtils::Constant. the lil helpers ๐งExtUtils::Constant::XSโ generates C code for XS modules' constants. C code goes brrr ๐ExtUtils::Embedโ utilities for embedding Perl in C/C++ applications ๐ซถExtUtils::Installโ installs files from here to there. literally the moving truck ๐ExtUtils::Installedโ inventory management of installed modules. a lil librarian ๐ExtUtils::Liblistโ decides which libraries to use and how. the whole selection process ๐ExtUtils::MMโ OS-adjustedExtUtils::MakeMakersubclass. adapts to your platform ๐ExtUtils::MM_AIXโ AIX-specific subclass ofExtUtils::MM_Unix๐ExtUtils::MM_Anyโ platform-agnostic MM methods. works everywhere, iconic ๐ExtUtils::MM_BeOSโ methods to override UN*X behaviour inExtUtils::MakeMaker๐งกExtUtils::MM_Cygwinโ methods to override UN*X behaviour inExtUtils::MakeMaker๐งExtUtils::MM_DOSโ DOS-specific subclass ofExtUtils::MM_Unix๐พExtUtils::MM_Darwinโ special behaviors for OS X ๐ExtUtils::MM_MacOSโ once producedMakefiles for MacOS Classic. retired legend ๐ฐ๏ธExtUtils::MM_NW5โ methods to override UN*X behaviour inExtUtils::MakeMaker๐ฅExtUtils::MM_OS2โ methods to override UN*X behaviour inExtUtils::MakeMaker๐ตExtUtils::MM_OS390โ OS390-specific subclass ofExtUtils::MM_Unix๐ขExtUtils::MM_QNXโ QNX-specific subclass ofExtUtils::MM_Unix๐ExtUtils::MM_UWINโ U/WIN-specific subclass ofExtUtils::MM_Unix๐ExtUtils::MM_Unixโ the methods used byExtUtils::MakeMaker. the OGs ๐ExtUtils::MM_VMSโ methods to override UN*X behaviour inExtUtils::MakeMaker๐ซExtUtils::MM_VOSโ VOS-specific subclass ofExtUtils::MM_Unix๐ExtUtils::MM_Win32โ methods to override UN*X behaviour inExtUtils::MakeMaker๐ชExtUtils::MM_Win95โ a method to customizeMakeMakerfor Win9X ๐ExtUtils::MYโ theExtUtils::MakeMakersubclass for customization. your personal touch ๐ExtUtils::MakeMakerโ creates a moduleMakefile. the whole build pipeline bestie โจExtUtils::MakeMaker::Configโ a wrapper aroundConfig.pm๐ExtUtils::MakeMaker::FAQโ frequently asked questions aboutMakeMaker. your questions, answered ๐ExtUtils::MakeMaker::Localeโ bundledEncode::Locale๐ฆExtUtils::MakeMaker::Tutorialโ writing a module withMakeMaker. the tutorial arc ๐ExtUtils::Manifestโ utilities to write and check aMANIFESTfile ๐ExtUtils::Miniperlโ writes the C code forminiperlmain.candperlmain.c๐ฃExtUtils::Mkbootstrapโ makes a bootstrap file for use byDynaLoader๐ฅพExtUtils::Mksymlistsโ writes linker options files for dynamic extension ๐ExtUtils::PL2Batโ batch file creation to run Perl scripts on Windows ๐ฆExtUtils::Packlistโ manages.packlistfiles ๐ExtUtils::ParseXSโ converts Perl XS code into C code. the translator, ate ๐ฅExtUtils::ParseXS::Constantsโ initialization values for some globals ๐งฎExtUtils::ParseXS::Evalโ a clean package to evaluate code in ๐งผExtUtils::ParseXS::Nodeโ classes for nodes of an Abstract Syntax Tree. tree branches fr ๐ณExtUtils::ParseXS::Utilitiesโ subroutines used withExtUtils::ParseXS๐งฐExtUtils::Typemapsโ read, write and modify Perl/XS typemap files ๐พExtUtils::Typemaps::Cmdโ quick commands for handling typemaps โกExtUtils::Typemaps::InputMapโ an entry in theINPUTsection of a typemap ๐ฅExtUtils::Typemaps::OutputMapโ an entry in theOUTPUTsection of a typemap ๐คExtUtils::Typemaps::Typeโ an entry in theTYPEMAPsection of a typemap ๐คExtUtils::XSSymSetโ keeps sets of symbol names palatable to the VMS linker ๐ExtUtils::testlibโ addsblib/*directories to@INC๐งชFatalโ swaps functions for equivalents that succeed or die. all or nothing, periodt ๐Fcntlโ various flag constants and helper functions from C'sfcntl.h๐ฉFile::Basenameโ parses file paths into directory, filename and suffix. paths get dissected ๐ชFile::Compareโ compares files or filehandles ๐File::Copyโ copies files or filehandles. copy-paste but make it Perl ๐File::DosGlobโ DOS-like globbing and then some ๐พโจFile::Fetchโ a generic file fetching mechanism ๐File::Findโ traverses a directory tree. going on an adventure ๐ฒFile::Globโ a Perl extension for the BSD glob routine ๐File::GlobMapperโ extends file glob to allow input and output files ๐บ๏ธFile::Pathโ creates or removes directory trees. landscaping, but for dirs ๐ณFile::Specโ portably performs operations on file names. cross-platform slay ๐File::Spec::AmigaOSโFile::Specfor AmigaOS ๐กFile::Spec::Cygwinโ methods for Cygwin file specs ๐งFile::Spec::Epocโ methods for Epoc file specs ๐ฑFile::Spec::Functionsโ portably performs operations on file names. same vibe, function-flavored ๐File::Spec::MacโFile::Specfor Mac OS (Classic) ๐File::Spec::OS2โ methods for OS/2 file specs ๐ตFile::Spec::UnixโFile::Specfor Unix, and the base for the otherFile::Specmodules. the blueprint ๐File::Spec::VMSโ methods for VMS file specs ๐ซFile::Spec::Win32โ methods for Win32 file specs ๐ชFile::Tempโ returns the name and handle of a temporary file, safely. temp but trustworthy ๐ซถFile::statโ a by-name interface to Perl's built-instat()functions ๐ต๏ธFileCacheโ keeps more files open than the system permits. breaking the rules (legally) ๐ฅFileHandleโ supplies object methods for filehandles ๐Filter::Simpleโ simplified source filtering. filtering but make it easy โจFilter::Util::Callโ the Perl Source Filter Utility Module ๐งฐFindBinโ locates the directory of the original Perl script. finding your roots ๐ฑGDBM_Fileโ Perl5 access to the gdbm library. ๐๏ธGetopt::Longโ extended processing of command line options. options got range ๐ฅGetopt::Long::Parserโ theGetopt::Longobject-oriented interface ๐Getopt::Stdโ processes single-character switches with switch clustering ๐๏ธHTTP::Tinyโ a small, simple, correct HTTP/1.1 client. tiny but mighty ๐โจHash::Utilโ a selection of general-utility hash subroutines ๐Hash::Util::FieldHashโ support for inside-out classes ๐I18N::Collateโ compares 8-bit scalar data according to the current locale ๐I18N::LangTagsโ functions for dealing with RFC3066-style language tags ๐ท๏ธI18N::LangTags::Detectโ detects the user's language preferences ๐I18N::LangTags::Listโ tags and names for human languages ๐ฃ๏ธI18N::Langinfoโ queries locale information ๐IOโ loads various IO modules ๐ฆIO::Compressโ read and write compressed data in multiple formats. compression buffet ๐ฝ๏ธIO::Compress::Baseโ base class forIO::Compressmodules ๐งฑIO::Compress::Bzip2โ writes bzip2 files and buffers ๐๏ธIO::Compress::Deflateโ writes RFC 1950 files and buffers ๐IO::Compress::FAQโ frequently asked questions aboutIO::Compress๐IO::Compress::Gzipโ writes RFC 1952 files and buffers ๐๏ธIO::Compress::RawDeflateโ writes RFC 1951 files and buffers ๐ฆIO::Compress::Zipโ writes zip files and buffers ๐คIO::Dirโ supplies object methods for directory handles. (hi again, same energy asDirHandle) ๐IO::Fileโ supplies object methods for filehandles ๐IO::Handleโ supplies object methods for I/O handles ๐IO::Pipeโ supplies object methods for pipes ๐ฐIO::Pollโ an object interface to the systempollcall ๐ณ๏ธIO::Seekableโ supplies seek-based methods for I/O objects ๐IO::Selectโ an OO interface to the"select"system call ๐ฏIO::Socketโ an object interface to socket communications ๐IO::Socket::INETโ an object interface forAF_INETdomain sockets ๐IO::Socket::IPโ a family-neutral IP socket supporting both IPv4 and IPv6. bi-lingual networking ๐ฅIO::Socket::UNIXโ an object interface forAF_UNIXdomain sockets ๐งIO::Uncompress::AnyInflateโ uncompresses zlib-based (zip, gzip) files and buffers ๐IO::Uncompress::AnyUncompressโ uncompresses gzip, zip, bzip2, zstd, xz, lzma, lzip, lzf or lzop files and buffers. the whole squad ๐IO::Uncompress::Baseโ base class forIO::Uncompressmodules ๐งฑIO::Uncompress::Bunzip2โ reads bzip2 files and buffers ๐๏ธIO::Uncompress::Gunzipโ reads RFC 1952 files and buffers ๐IO::Uncompress::Baseโ (same as above, base class energy) ๐งฑ
and bestie we're not done yet โ hold on, the tour continues ๐
IO::Uncompress::Inflateโ read RFC 1950 files/buffers ๐IO::Uncompress::RawInflateโ read RFC 1951 files/buffers, raw and unfiltered, no cap โจIO::Uncompress::Unzipโ read zip files/buffers, unzipping the drama away ๐ฆIO::Zlibโ theIO::-style interface toCompress::Zlib, serving looks ๐IPC::Cmdโ finding and running system commands made easy. literally the bestie who handles the scary subprocess stuff for you ๐ซถ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(). three-way bind, main character behavior ๐IPC::Semaphoreโ SysV Semaphore IPC object class ๐ฆIPC::SharedMemโ SysV Shared Memory IPC object class ๐งIPC::SysVโ System V IPC constants and system calls, the OGs ๐๏ธInternalsโ reserved special namespace for internals related functions. do not touch unless you know, iykyk ๐JSON::PPโ aJSON::XS-compatible pure-Perl module โญJSON::PP::Booleanโ dummy module providingJSON::PP::Boolean๐List::Utilโ a selection of general-utility list subroutines, like the little spoon of your module list ๐List::Util::XSโ indicates ifList::Utilwas compiled with a C compiler ๐ฅLocale::Maketextโ framework for localization ๐Locale::Maketext::Cookbookโ recipes for usingLocale::Maketext๐ฉโ๐ณLocale::Maketext::Gutsโ deprecated module to loadLocale::Maketextutf8 code ๐Locale::Maketext::GutsLoaderโ deprecated module to loadLocale::Maketextutf8 code ๐Locale::Maketext::Simpleโ simple interface toLocale::Maketext::Lexicon๐ธLocale::Maketext::TPJ13โ an article about software localization ๐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 ๐Math::BigIntโ arbitrary size integer math package ๐ขMath::BigInt::Calcโ pure Perl module to supportMath::BigInt๐งฎMath::BigInt::FastCalcโMath::BigInt::Calcwith some XS for more speed โจMath::BigInt::Libโ 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. sin, cos, tan, the whole squad ๐Memoizeโ make functions faster by trading space for time. the classic deal-with-the-devil arc ๐ฅMemoize::AnyDBM_Fileโ glue to provideEXISTSforAnyDBM_Filefor Storable use ๐ฉนMemoize::Expireโ plug-in module for automatic expiration of memoized values โณMemoize::NDBM_Fileโ glue to provideEXISTSforNDBM_Filefor Storable use ๐ฉนMemoize::SDBM_Fileโ DEPRECATED compatibility shim ๐ชฆMemoize::Storableโ store memoized data in a Storable database ๐ฆModule::CoreListโ what modules shipped with versions of perl ๐๏ธModule::CoreList::Utilsโ what utilities shipped with versions of perl ๐ ๏ธModule::Loadโ runtimerequireof both modules and files ๐Module::Load::Conditionalโ looking up module information / loading at runtime ๐Module::Loadedโ mark modules as loaded or unloaded โModule::Metadataโ gather package and POD information from perl module files ๐ต๏ธNDBM_Fileโ tied access to ndbm files ๐๏ธNEXTโ provide a pseudo-classNEXT(et al) that allows method redispatch โญ๏ธNet::Cmdโ Network Command class (as used by FTP, SMTP etc) ๐กNet::Configโ local configuration data for libnet โ๏ธNet::Domainโ attempt 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 users 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โ 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 ๐ช
okay bestie, we're entering the section of the list where everything is named after one letter or a vague concept. stay with me. ๐
Oโ generic interface to Perl Compiler backends ๐ญODBM_Fileโ tied access to odbm files ๐๏ธOpcodeโ disable named opcodes when compiling perl code ๐ซPOSIXโ Perl interface to IEEE Std 1003.1 ๐Params::Checkโ a generic input parsing/checking mechanism ๐Parse::CPAN::Metaโ parseMETA.ymlandMETA.jsonCPAN metadata files ๐งพPerl::OSTypeโ map Perl operating system names to generic types ๐บ๏ธPerlIOโ on demand loader for PerlIO layers and root ofPerlIO::*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โ group 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โ convert POD data to formatted *roff input ๐Pod::ParseLinkโ parse anL<>formatting code in POD text ๐Pod::Perldocโ look up Perl documentation in Pod format ๐Pod::Perldoc::BaseToโ base for Pod::Perldoc formatters ๐งฑPod::Perldoc::GetOptsOOโ customized option parser for Pod::Perldoc ๐๏ธPod::Perldoc::ToANSIโ render Pod with ANSI color escapes ๐Pod::Perldoc::ToCheckerโ let Perldoc check Pod for errors โPod::Perldoc::ToManโ let Perldoc render Pod as man pages ๐Pod::Perldoc::ToNroffโ let Perldoc convert Pod to nroff ๐จ๏ธPod::Perldoc::ToPodโ let Perldoc render Pod as ... Pod! ๐ iconic, honestlyPod::Perldoc::ToRtfโ let Perldoc render Pod as RTF ๐Pod::Perldoc::ToTermโ render Pod with terminal escapes ๐ปPod::Perldoc::ToTextโ let Perldoc render Pod as plaintext ๐Pod::Perldoc::ToTkโ let Perldoc useTk::Podto render Pod ๐ชPod::Perldoc::ToXmlโ let Perldoc render Pod as XML ๐ท๏ธPod::Simpleโ framework for parsing Pod ๐งPod::Simple::Checkerโ check the Pod syntax of a document ๐ฉบPod::Simple::Debugโ putPod::Simpleinto trace/debug mode ๐Pod::Simple::DumpAsTextโ dump Pod-parsing events as text ๐คPod::Simple::DumpAsXMLโ turn Pod into XML ๐Pod::Simple::HTMLโ convert Pod to HTML ๐Pod::Simple::HTMLBatchโ convert several Pod files to several HTML files ๐ฆPod::Simple::JustPodโ just the Pod, the whole Pod, and nothing but the Pod ๐ฏPod::Simple::LinkSectionโ represent"section"attributes ofLcodes ๐Pod::Simple::Methodyโ turnPod::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โ format Pod as RTF ๐Pod::Simple::Searchโ find POD documents in directory trees ๐Pod::Simple::SimpleTreeโ parse Pod into a simple parse tree ๐ณPod::Simple::Subclassingโ write a formatter as aPod::Simplesubclass ๐ฉโ๐ปPod::Simple::Textโ format Pod as plaintext ๐Pod::Simple::TextContentโ get the text content of Pod ๐Pod::Simple::XHTMLโ format Pod as validating XHTML โPod::Simple::XMLOutStreamโ turn Pod into XML ๐Pod::Textโ convert POD data to formatted text ๐Pod::Text::Colorโ convert POD data to formatted color ASCII text ๐Pod::Text::Overstrikeโ convert POD data to formatted overstrike text ๐ฅPod::Text::Termcapโ convert 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- search for key in dictionary file ๐SelectSaverโ save and restore selected file handle ๐พSelfLoaderโ load functions only on demand ๐ชSocketโ networking constants and support functions ๐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โ try every conceivable way to get hostname ๐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 ๐TAP::Formatter::Sessionโ abstract base class for harness output delegate ๐งฑTAP::Harnessโ run test scripts with statistics ๐TAP::Harness::Envโ parsing harness related environmental variables where appropriate ๐ฟTAP::Objectโ base class that provides common functionality to all"TAP::*"modules ๐TAP::Parserโ the main character that parses TAP output, no cap ๐TAP::Parser::Aggregatorโ bundles up a whole bunch ofTAP::Parserresults into one, lowkey essentialTAP::Parser::Grammarโ a grammar for the Test Anything Protocol. that's it, that's the vibe โจTAP::Parser::Iteratorโ base class for TAP source iterators, the parent of the whole iterator famTAP::Parser::Iterator::Arrayโ iterator for TAP sources that live in arraysTAP::Parser::Iterator::Processโ iterator for TAP sources that come from a processTAP::Parser::Iterator::Streamโ iterator for TAP sources coming off a filehandleTAP::Parser::IteratorFactoryโ figures out whichSourceHandlerobjects to use for a givenSource, like a little matchmaker ๐TAP::Parser::Multiplexerโ multiplex multipleTAP::Parsers, i.e. keep several parsers going at onceTAP::Parser::Resultโ base class forTAP::Parseroutput objectsTAP::Parser::Result::Bailoutโ the bailout result token.TAP::Parser::Result::Commentโ the comment result token.TAP::Parser::Result::Planโ the plan result token.TAP::Parser::Result::Pragmaโ the TAP pragma token.TAP::Parser::Result::Testโ the test result token.TAP::Parser::Result::Unknownโ the unknown result token.TAP::Parser::Result::Versionโ the TAP syntax version token.TAP::Parser::Result::YAMLโ the YAML result token.TAP::Parser::ResultFactoryโ the factory for creatingTAP::Parseroutput objects ๐ญTAP::Parser::Schedulerโ schedules tests while you're doing parallel testingTAP::Parser::Scheduler::Jobโ one single testing job.TAP::Parser::Scheduler::Spinnerโ a no-op job. it just sits there. slay โจ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 executable ๐ชTAP::Parser::SourceHandler::RawTAPโ streams output from raw TAP sitting in a scalar or 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 ๐Term::Capโ the Perl termcap interfaceTerm::Completeโ the Perl word completion moduleTerm::Complete... no wait,Term::ReadLineโ the Perl interface to various "readline" packages.Term::Tableโ formats a header and rows into a tableTerm::Table::Cellโ the representation of a cell in a table.Term::Table::CellStackโ combines several cells into one (vertical).Term::Table::HashBaseโ builds hash based classes.Term::Table::LineBreakโ breaks up lines so they fit in tables.Term::Table::Utilโ utilities forTerm::Table.Testโ provides a simple framework for writing test scripts ๐งชTest2โ 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 ๐Test2::API::Contextโ an object to represent a testing context.Test2::API::Instanceโ the objectTest2::APIuses under the hoodTest2::API::InterceptResultโ the representation of a list of events.Test2::API::InterceptResult::Eventโ representation of an event for use in โฆand yeah bestie the manpage literally cuts off right there, that's all it gives us ๐ญTest2::API::InterceptResult::Hubโ the hub used byInterceptResult.Test2::API::InterceptResult::Squasherโ encapsulation of the algorithm that โฆ(also cut off, the page is like that, not my fault ๐)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::V0Test2::Bundle::Moreโ ALMOST a drop-in replacement forTest::More. ALMOST, okay, read the fine print ๐Test2::Bundle::Simpleโ ALMOST a drop-in replacement forTest::Simple.Test2::Compareโ theTest2extension for writing deep comparison tools.Test2::Compare::Arrayโ the internal representation of an array comparison.Test2::Compare::Bagโ the internal representation of a bag comparison.Test2::Compare::Baseโ the 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โ the representation of differences between nested dataTest2::Compare::Eventโ the event specificObjectsubclass.Test2::Compare::EventMetaโ the meta class for events in deep comparisonsTest2::Compare::Floatโ compares two values as numbers, but with tolerance.Test2::Compare::Hashโ the 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โ the representation of an object during deep โฆ(cut off again, the original literally ends there ๐)Test2::Compare::OrderedSubsetโ the internal representation of an ordered subset.Test2::Compare::Patternโ uses a pattern to validate values in a deep โฆ(yep, truncated, moving on ๐ฆ)Test2::Compare::Refโ ref comparisonTest2::Compare::Regexโ regex direct comparisonTest2::Compare::Scalarโ the representation of a Scalar Ref in deep โฆ(cut off, but you get it)Test2::Compare::Setโ allows a field to be matched against a set of โฆ(also truncated!)Test2::Compare::Stringโ compares two values as stringsTest2::Compare::Undefโ checks that something is undefinedTest2::Compare::Wildcardโ a placeholder check.Test2::Envโ documentation for the environment variables used or set by Test2.Test2::Eventโ the 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โ the 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 the TAP version.Test2::Event::V2โ the second generation event.Test2::Event::Waitingโ tells all procs and threads that it is time to be doneTest2::EventFacetโ the base class for all event facets.Test2::EventFacet::Aboutโ the facet with event details.Test2::EventFacet::Amnestyโ the facet for assertion amnesty. (a full pardon, bestie ๐ซถ)Test2::EventFacet::Assertโ the facet representing an assertion.Test2::EventFacet::Controlโ the facet for hub actions and behaviors.Test2::EventFacet::Errorโ the facet for errors that need to be shown.Test2::EventFacet::Hubโ the facet for the hubs an event passes through.Test2::EventFacet::Infoโ the facet for information a developer might care about.Test2::EventFacet::Info::Tableโ the intermediary representation of a table.Test2::EventFacet::Metaโ the facet for meta-dataTest2::EventFacet::Parentโ the facet for events that contains other eventsTest2::EventFacet::Planโ the facet for setting the planTest2::EventFacet::Renderโ the facet that dictates how to render an event.Test2::EventFacet::Traceโ the debug information for eventsTest2::Formatterโ the namespace for formatters.Test2::Formatter::TAPโ the standard TAP formatterTest2::Handleโ the base class forTest2handles used inV#bundles.Test2::Hubโ the conduit through which all events flow. iconic โจTest2::Hub::Interceptorโ the hub used by the interceptor to grab results.Test2::Hub::Interceptor::Terminatorโ an exception class used by โฆ(truncated, rip ๐)Test2::Hub::Subtestโ the hub used by subtestsTest2::IPCโ turns on IPC so you get threading or forking support.Test2::IPC::Driverโ the base class for Test2 IPC drivers.Test2::IPC::Driver::Filesโ the temp dir + files concurrency model.Test2::Manualโ the documentation hub forTest2andTest2-Suite.Test2::Manual::Anatomyโ the hub for documentation of the inner workings of โฆ(cut off, again, I know ๐ญ)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 โฆ(truncated)Test2::Manual::Anatomy::IPCโ the manual for the IPC system.Test2::Manual::Anatomy::Utilitiesโ an overview of utilities for Test2.Test2::Manual::Concurrencyโ documentation for Concurrency support.Test2::Manual::Contributingโ how to contribute to the Test2 project.Test2::Manual::Testingโ the hub for documentation about writing tests with Test2.Test2::Manual::Testing::Introductionโ an introduction to testing with Test2.Test2::Manual::Testing::Migratingโ how to migrate existing tests from โฆ(and the page cuts off right here ๐)Test2::Manual::Testing::Planningโ the many ways to set a plan, bestie. so many. pick one. ๐Test2::Manual::Testing::Todoโ tutorial for marking tests as TODO. the "we'll get to it" pile, but make it official. โจTest2::Manual::Toolingโ manual page for tool authors. iykyk, this one's for the builders. ๐ฅTest2::Manual::Tooling::FirstToolโ write your first tool with Test2. baby's first tool ๐ฅน so iconic.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 maps Test::Builder methodsTest2::Manual::Tooling::Testingโ tutorial on how to test your testing tools. testing inception fr fr ๐Test2::Mockโ module for managing mocked classes and instances. fake it till the tests pass ๐Test2::Pluginโ documentation for plugins.Test2::Plugin::BailOnFailโ automatically bail out of testing on the first testTest2::Plugin::DieOnFailโ automatically die on the first test failure. dramatic but valid ๐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. clocking the vibe โฑ๏ธTest2::Plugin::UTF8โ Test2 plugin to test with utf8. unicode besties only ๐ฆTest2::Requireโ base class and documentation for skip-unless type testTest2::Require::AuthorTestingโ only run a test when the AUTHOR_TESTINGTest2::Require::AutomatedTestingโ only run a test when the AUTOMATED_TESTINGTest2::Require::EnvVarโ only run a test when a specific environment variableTest2::Require::ExtendedTestingโ only run a test when the EXTENDED_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 the NONINTERACTIVE_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 the RELEASE_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.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::More style) comparison tools. retro but make it slay โจTest2::Tools::Compareโ tools for comparing deep data structures.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::Refcountโ assert reference counts on objectsTest2::Tools::Specโ RSPEC implementation on top of Test2::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. meta af ๐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 of Scope::GuardTest2::Util::HashBaseโ build hash based classes.Test2::Util::Importerโ inline copy of Importer.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 for Test2::EventFacet::Trace.Test2::V0โ 0th edition of the Test2 recommended bundle. the OG ๐Test2::V1โ V1 edition of the Test2 recommended bundle.Test2::V1::Baseโ base namespace used for Test2::Handle objects created viaTest2::V1::Handleโ V1 subclass of Test2::Handle.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::Builder subclass of Test2::Formatter::TAPTest::Builder::Moduleโ base class for test modulesTest::Builder::Testerโ test testsuites that have been built withTest::Builder::Tester::Colorโ turn on colour in Test::Builder::TesterTest::Builder::TodoDiagโ Test::Builder subclass of Test2::Event::DiagTest::Harnessโ run Perl standard test scripts with statisticsTest::Harness::Beyondโ beyond make testTest::Moreโ yet another framework for writing test scriptsTest::Simpleโ basic utilities for writing tests.Test::Testerโ ease testing test modules built with Test::BuilderTest::Tester::Captureโ help testing test modules built with Test::BuilderTest::Tester::CaptureRunnerโ help testing test modules built with Test::BuilderTest::Tutorialโ a tutorial about writing really basic testsTest::use::okโ alternative to Test::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). legacy energy, handle with care bestie โ ๏ธ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 neededTie::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 timersTime::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 by Time::gmtime and Time::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 for Unicode::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 via Unicode::CollateUnicode::Normalizeโ Unicode Normalization FormsUnicode::UCDโ Unicode character databaseUser::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โ converts back and forth between VMS and Unix file spec syntax, no capVMS::Stdioโ standard I/O functions, but via VMS extensionsWin32โ interfaces to some Win32 API functionsWin32API::Fileโ low-level access to Win32 system API calls for files/dirs.Win32COREโ Win32 CORE function stubsXS::APItestโ tests the perl C APIXS::Typemapโ a module that tests the XS typemaps shipped with perlXSLoaderโ dynamically loads C libraries into Perl codeautodie::Scope::Guardโ wrapper class for calling subs at end of scopeautodie::Scope::GuardStackโ hook stack for managing scopes via%^Hautodie::Utilโ internal utility subroutines forautodieandFatalversion::Internalsโ Perl extension for Version Objects
okay bestie, wanna see literally every module sitting on your system โ even the undocumented ones, even the ones from outside the standard release? say less. just run this (and psst, if you're in the default win32 shell, use double quotes instead of single quotes, okay?):
% 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 being populated by "PERL5LIB", "PERLLIB", and "PERL_USE_UNSAFE_INC", bestie โ it's giving taint mode, it's giving protection โจ.) All of those modules should have their own docs installed and reachable through your system man(1) command. No find program? use the Perl find2perl program instead โ it spits out Perl code as output and you just run it through perl. Got a man program but it can't find your modules? yeah that's a manpath issue, you'll have to fix that. See perl for the deets. And if you have no system man command at all, try the perldoc program instead. problem solved ๐
Also worth knowing: perldoc perllocal hands you a (possibly incomplete, we keep it real) list of the modules that have been further installed on your system. (The perllocal.pod file gets updated by the standard MakeMaker install process โ so blame MakeMaker, not me.)
๐ธ Extension Modules ๐ธ
Extension modules are written in C (or a mix of Perl and C, because why not both). They usually get dynamically loaded into Perl right when you need them, but they can also be linked in statically. Supported extension modules include Socket, Fcntl, and POSIX. iconic behavior honestly.
A ton of popular C extension modules are not bundled (or at least, not completely) โ because they're big, because they're chaotic and volatile, or simply because nobody had time to adequately test and configure them across the whole multitude of platforms Perl was beta-tested on. You're encouraged to go hunt for them on CPAN (described below, keep reading ๐ซถ), or just use web search engines like Google or DuckDuckGo.
๐ CPAN ๐
CPAN stands for Comprehensive Perl Archive Network โ say it with me. It's a globally replicated trove of Perl materials: documentation, style guides, tricks and traps, alternate ports to non-Unix systems, and occasionally binary distributions for those systems too. Search engines for CPAN live at https://www.cpan.org/
And here's the main character part: CPAN includes around a thousand unbundled modules, some of which need 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, periodt.)
Perl implements a class using a package, but โ huge plot twist โ 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 which can be used as methods. And a method? 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). that's it. that's the whole tea. ๐
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 whoever's using the module. Likewise, the module might set up an AUTOLOAD function to slurp in subroutine definitions on demand โ also transparent. Only the .pm file is required to exist. See perlsub, perlobj, and AutoLoader for the details on that AUTOLOAD mechanism.
๐ Guidelines for Module Creation ๐
- Do similar modules already exist in some form?
If so, please try to reuse the existing modules โ either whole, or by inheriting useful features into a new class. If that's not practical, try getting together with the module authors to work on extending or enhancing the functionality of what already exists. 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 genuinely helps 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(...);). And remember you can add no warnings qw(...); to individual blocks of code that need less 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 usable 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, bestie, win-win). 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 hard for multiple other packages to use yours. Keep state information in objects.
Always use -w.
Try to use strict; (or use strict qw(...);). Remember 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.
- Some simple style guidelines
The perlstyle manual supplied with Perl has many helpful points.
Coding style is a matter of personal taste. Lots of 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's 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 (they 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. ๐
- 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, and that's just rude. 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.
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. yeah. vibe check: failed. ๐)
As a general rule, if the module is trying to be object oriented then export nothing. If it's just a collection of functions then@EXPORT_OKanything but use@EXPORTwith caution.
- Pick a name for your module, bestie. ๐
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. chaos, honestly.
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! collab era โจ
READMEand 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. boundaries, but make them consensual ๐
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. ๐ฅ
<div align="center">okay that's the whole page bestie, and it's sourced from perl v5.44.0, dated 2026-10-17, filed under PERLMODLIB(1perl). go forth and write iconic modules, you absolute legend ๐ฆโจ๐</div>
๐ฆ where this page comes from
- arch rolling: perl 5.44.0-1 ยท Artistic-1.0-Perl AND GPL-1.0-or-later
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms