Class::Generate is a Perl5 module to simplify creating class
hierarchies. It offers typed or untyped scalar, array, and hash
members, required members, private members, methods (both
instance and class), and other common features of object-
oriented software development. Of course, you can implement all
these things without a special module, but doing it via
Class::Generate is much, much more concise. And furthermore,
it's much less error prone: if you are using Perl's -w flag,
Class::Generate will catch many class specification and usage
errors.
require EXPR only accepts Class/Name.pm style module names, not Class::Name.
How frustrating! For that, we provide load_class 'Class::Name'.
It's often useful to test whether a module can be loaded, instead of throwing
an error when it's not available. For that, we provide try_load_class
'Class::Name'.
Finally, sometimes we need to know whether a particular class has been loaded.
Asking %INC is an option, but that will miss inner packages and any class for
which the filename does not correspond to the package name. For that,
we provide is_class_loaded 'Class::Name'.
Daemon::Control provides a library for creating init scripts in perl. Your perl
script just needs to set the accessors for what and how you want something to
run and the library takes care of the rest.
You can launch programs through the shell (/usr/sbin/my_program) or launch Perl
code itself into a daemon mode. Single and double fork methods are supported and
in double-fork mode all the things you would expect like reopening
STDOUT/STDERR, switching UID/GID are supported.
There are two modules in this distribution. Date::Doomsday calculates
doomsday for a particular year. Date::DayOfWeek uses the doomsday
algorithm to calculate the day of the week for any given date.
Doomsday is a cute little idea invented by Dr John Conway that makes it
very easy to figure out the day of the week for any date.
For more information about the origins and mathematics surrounding
doomsday, see the following web sites:
http://rudy.ca/doomsday.html
http://quasar.as.utexas.edu/BillInfo/doomsday.html
http://www.cst.cmich.edu/users/graha1sw/Pub/Doomsday/Doomsday.html
The purpose of this library was to replace our dependence on Unix epoch time,
which, being limited to a range of about 1970 to 2030, is inadequate for our
purposes (we have data as old as 1870). This date library effectively handles
dates from A.D. 1000 to infinity, and would probably work all the way back to 0
(ignoring, of course, the switch-over to the Gregorian calendar). The useful
features of Unix epoch time (ease of date difference calculation and date
comparison, strict ordering) are preserved, and elements such as
human-legibility are added. The library handles fractional seconds and some
date/time manipulations used for the Global Positioning Satellite system.
This module provides a 'Local Mean Time' timezone for DateTime. Using it you
can determine the Mean Time for any location on Earth. Note however that the
Mean Time and the Apparent Time (where the sun is in the sky) differ from day
to day. This module may account for Local Apparent Time in the future but then
again, the Solar:: modules will probably be a better bet.
If you want more information on the difference between LMT and LAT, search the
www for 'equation of time' or 'ephemeris'.
Dist::Zilla builds distributions of code to be uploaded to the CPAN.
In this respect, it is like ExtUtils::MakeMaker, Module::Build, or
Module::Install. Unlike those tools, however, it is not also a
system for installing code that has been downloaded from the CPAN.
Since it's only run by authors, and is meant to be run on a repository
checkout rather than on published, released code, it can do much
more than those tools, and is free to make much more ludicrous
demands in terms of prerequisites.
Often Perl modules are written to wrap functionality found in existing C
headers, libraries, or to use OS-specific features. It is useful in the Build.PL
or Makefile.PL file to check for the existance of these requirements before
attempting to actually build the module.
Objects in this class provide an extension around ExtUtils::CBuilder to simplify
the creation of a .c file, compiling, linking and running it, to test if a
certain feature is present.
It may also be necessary to search for the correct library to link against, or
for the right include directories to find header files in. This class also
provides assistance here.
File::NFSLock - perl module to do NFS (or not) locking.
The module is based of concept of hard linking of files being atomic
across NFS. This concept was mentioned in Mail::Box::Locker (which was
originally presented in Mail::Folder::Maildir). Some routine flow is
taken from there -- particularly the idea of creating a random local
file, hard linking a common file to the local file, and then checking
the nlink status. Some ideologies were not complete (uncache mechanism,
shared locking) and some coding was even incorrect (wrong stat index).
File::NFSLock was written to be light, generic, and fast.
This is yet another module that lets you access or change the elements
of a hash using methods with the same name as the element's key. It
follows in the footsteps of Hash::AsObject, Hash::Inflator,
Data::OpenStruct::Deep, Object::AutoAccessor, and probably others. The
main difference between this module and its forebears is that it
supports tied hashes, in addition to regular hashes. This allows a
modular division of labor: this class is generic and treats all hashes
the same; any special semantics come from the tied hash.