Perl Best Practices

by Damian Conway, published by O'Reilly, 2005

Appendix D.1. Recommended Core Modules

base Specifies the base classes of the current package at compile time
Benchmark Provides utilities to time fragments of Perl code
Carp Provides subroutines that warn or throw exceptions, reporting the problem from the caller's location
charnames Enables the use of character names via \N{CHARNAME} string literal escapes
CPAN Simplifies the downloading and installation of CPAN modules
Data::Dumper Converts data structures into string representations of Perl code
Devel::DProf Profiles Perl code
English Defines readable English names for special variables
Fatal Replaces functions and subroutines with equivalents that either succeed or throw an exception
File::Glob Implements command-line filename globbing
File::Temp Provides a safe and efficient way to create temporary files
Getopt::Long Parses command-line options
IO::File Creates I/O objects connected to files
IO::Handle Acts as the base class for filehandles and objects
List::Util Provides additional list-processing utilities missing from the core language
Memoize Optimizes subroutines by caching their return values and reusing them
overload Allows existing Perl operators to be redefined for objects of the current class
Scalar::Util Provides additional scalar-processing utilities missing from the core language
strict Prohibits unsafe uses of package variables, symbolic references, and barewords
Test::Harness Executes and summarizes Perl test suites
Test::More Provides more sophisticated utilities for writing tests
Test::Simple Provides basic utilities for writing tests
Time::HiRes Installs high-resolution versions of Perl's built-in time-keeping functions
version Allows multipart versions to be specified as objects

Appendix D.2. Recommended CPAN Modules

Attribute::Types Provides markers that confer type constraints on variables
Class::Std Implements encapsulated class hierarchies
Class::Std::Utils Provides utility functions for producing unique identifiers for any object, for creating anonymous scalars, and for extracting initialization values from a hierarchical initializer list
Config::General Reads and writes almost any type of configuration file
Config::Std Reads and writes simple configuration files, preserving their structure and comments
Config::Tiny Reads and writes simple "INI" format configuration files with as little code as possible
Contextual::Return Simplifies returning different values in different contexts
Data::Alias Provides a comprehensive set of operations for aliasing variables
DateTime Creates powerful date and time objects
DBI Provides a generic interface to a large number of databases (see also the many DBD:: modules)
Devel::Size Reports the amount of memory a variable uses
Exception::Class Simplifies the creation of exception class hierarchies
File::Slurp Permits efficient reading and writing of entire files
Filter::Macro Converts a module into a macro that is expanded inline when the module is loaded
Getopt::Clade Builds command-line parsers from an WYSIWYG declaration
Getopt::Euclid Builds command-line parsers from command-line documentation
HTML::Mason Builds web sites from modular Perl/HTML specifications
Inline Enables Perl subroutines to be written in other programming languages
IO::InSitu Allows a file to be modified in place with backup protection
IO::Interactive Supplies handy subroutines for testing interactivity
IO::Prompt Simplifies interactive prompting for user input
Lexical::Alias Provides a smaller set of operations for aliasing variables
List::Cycle Creates objects that can cycle through lists of values
List::MoreUtils Provides additional list-processing utilities missing from the core language and the List::Util module
Log::Stdlog Allows simple event logging via a special filehandle
Module::Build Builds, tests, and installs Perl modules
Module::Starter Creates the directory structures and starter files needed to develop a Perl module
Module::Starter::PBP Creates the directory structures and starter files needed to develop a Perl module conforming to the guidelines presented in this book
only Loads only specific versions of a module
Parse::RecDescent Creates recursive-descent parsers
Perl6::Builtins Provides updated versions of several Perl builtins, notably the system command, with extra features that will be standard in Perl 6
Perl6::Export::Attrs Provides a simple and robust way to export subroutines from modules
Perl6::Form Implements a replacement for Perl format statements
Perl6::Slurp Opens a file and reads its contents in one statement
POE Implements a portable multitasking and networking framework for Perl
Readonly Creates read-only scalars, arrays, and hashes
Regexp::Autoflags Automatically appends /xms to all regexes
Regexp::Assemble Combines simple patterns into a single complex pattern
Regexp::Common Generates many commonly needed regular expressions
Regexp::MatchContext Defines "match variables" that aren't prohibitively expensive
Smart::Comments Enables special comments for debugging and reporting the progress of non-interactive loops
Sort::Maker Creates efficient sorting subroutines from simple descriptions
Sub::Installer Installs subroutines in packages
Text::Autoformat Automatically wraps and reformats plain text based on its content
Text::CSV Provides tools to manipulate comma-separated value strings
Text::CSV::Simple Simplifies parsing of CSV files
Text::CSV_XS Provides faster 8-bit-clean tools to manipulate comma separated value strings
XML::Parser Parses XML documents using the Expat library
YAML Serializes Perl data structures to a compact and readable string representation