The form()
subroutine may be exported from the module. It takes a series of format (or "picture") strings followed by replacement values, interpolates those values into each picture string, and returns the result. The effect is similar to the inbuilt perl format mechanism, although the field specification syntax is simpler and some of the formatting behaviour is more sophisticated.
Text::BibTeX
is a Perl library for reading, parsing, and processing BibTeX files. Text::BibTeX
gives you access to the data at many different levels: you may work with BibTeX entries as simple field to string mappings, or get at the original form of the data as a list of simple values (strings, macros, or numbers) pasted together.
Text::CSV_XS
provides facilities for the composition and decomposition of comma-separated values. An instance of the Text::CSV_XS
class will combine fields into a CSV string and parse a CSV string into fields. The module accepts either strings or files as input and support the use of user-specified characters for delimiters, separators, and escapes.
This Perl module allows you to split data into records by not only specifying what you wish to split the data on, but also by specifying an "unless" regular expression. If the text in question matches the "unless" regex, it will not be split there. This allows us to do things like split on newlines unless newlines are embedded in quotes.
MIME::Base64 module provides functions to encode and decode strings into and from the base64 encoding specified in RFC 2045 - MIME (Multipurpose Internet Mail Extensions). The base64 encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable. A 65-character subset ([A-Za-z0-9+/=]) of US-ASCII is used, enabling 6 bits to be represented per printable character.
Writing exporters is a pain. Some use Exporter, some use Sub::Exporter, some use Moose::Exporter, some use Exporter::Declare ... and some things are pragmas. Exporting on someone else's behalf is harder. The exporters don't provide a consistent API for this, and pragmas need to have their import method called directly, since they effect the current unit of compilation. Import::Into provides global methods to make this painless.
This module provides a convenient way to perform cleanup or other forms of resource management at the end of a scope. It is particularly useful when dealing with exceptions: the Scope::Guard constructor takes a reference to a subroutine that is guaranteed to be called even if the thread of execution is aborted prematurely. This effectively allows lexically-scoped "promises" to be made that are automatically honoured by perl's garbage collector.
Config::Tiny
is a Perl class to read and write .ini style configuration files with as little code as possible, reducing load time and memory overhead.
This module is primarily for reading human written files, and anything we write shouldn't need to have documentation/comments. If you need something with more power move up to Config::Simple
, Config::General
or one of the many other Config::*
modules.
Back in the early days of the web, many people learned Perl because of a wonderful Perl library called CGI
. It was simple enough to get started without knowing much about the language and powerful enough to keep you going, learning by doing was much fun. While most of the techniques used are outdated now, the idea behind it is not. Mojolicious is a new endeavor to implement this idea using modern technologies.
One recurring problem in modules that use Scalar::Util's weaken function is that it is not present in the pure-perl variant. If Scalar::Util is not available at all, it will issue a normal dependency on the module. However, if Scalar::Util is relatively new ( it is >= 1.19 ) and the module does not have weaken, the install will bail out altogether with a long error encouraging the user to seek support.
This is a simple role that provides methods to instantiate a class from a JSON string that (hopefully) represents it, and to serialize an object of the class to a JSON string. The JSON created from an instance should round trip to a new instance with the same values for the public attributes. Private attributes (that is ones without accessors,) will be ignored for both serialization and deserialization. The exact behaviour depends on that of JSON::Marshal
and JSON::Unmarshal
respectively.
The Cache modules are designed to assist a developer in persisting data for a specified period of time. Often these modules are used in web applications to store data locally to save repeated and redundant expensive calls to remote machines or databases. People have also been known to use Cache::Cache for its straightforward interface in sharing data between runs of an application or invocations of a CGI-style script or simply as an easy to use abstraction of the file system or shared memory.
The Getopt::Long
module implements an extended getopt function called GetOptions()
. It parses the command line from ARGV
, recognizing and removing specified options and their possible values.
This function adheres to the POSIX syntax for command line options, with GNU extensions. In general, this means that options have long names instead of single letters, and are introduced with a double dash "--". Support for bundling of command line options, as was the case with the more traditional single-letter approach, is provided but not enabled by default.
In situations where you have deep trees of classes, there is a common situation in which you test a module 4 or 5 subclasses down, which should follow the correct behaviour of not just the subclass, but of all the parent classes.
This should be done to ensure that the implementation of a subclass has not somehow ``broken'' the object's behaviour in a more general sense.
Test::Object is a testing package designed to allow you to easily test what you believe is a valid object against the expected behaviour of all of the classes in its inheritance tree in one single call.
The Readonly
module is an effective way to create non-modifiable variables. However, it's relatively slow.
The reason it's slow is that is implements the read-only-ness of variables via tied objects. This mechanism is inherently slow. Perl simply has to do a lot of work under the hood to make tied variables work.
This module corrects the speed problem, at least with respect to scalar variables. When Readonly::XS
is installed, Readonly
uses it to access the internals of scalar variables. Instead of creating a scalar variable object and tying it, Readonly
simply flips the SvREADONLY
bit in the scalar's FLAGS
structure.
File::Find
is great, but constructing the wanted routine can sometimes be a pain. File::Finder
provides a wanted-writer, using syntax that is directly mappable to the find(1)
command's syntax.
A File::Finder
object contains a hash of File::Find
options, and a series of steps that mimic find's predicates. Initially, a File::Finder
object has no steps. Each step method clones the previous object's options and steps, and then adds the new step, returning the new object. In this manner, an object can be grown, step by step, by chaining method calls. Furthermore, a partial sequence can be created and held, and used as the head of many different sequences.
SSL support for Net::SMTP.
Devel::Caller provides meatier version of caller.
This package is an internationalization library for Perl that aims to be compatible with the Uniforum message translations system as implemented for example in GNU gettext.
Net::Patricia does IP address lookups quickly in Perl.
Data::Tumbler - Dynamic generation of nested combinations of variants.
Set::Infinite is a set theory module for infinite sets.
This Raku module implements Common Lisp's format
language.