Assertions are the explict expressions of your assumptions about the
reality your program is expected to deal with, and a declaration of
those which it is not. They are used to prevent your program from
blissfully processing garbage inputs (garbage in, garbage out becomes
garbage in, error out) and to tell you when you've produced garbage
output.
When you're writing unit tests for code that deals with tainted data,
you'll want to have a way to provide tainted data for your routines to
handle, and easy ways to check and report on the taintedness of your
data, in standard Test::More style.
When the code you're testing returns multiple lines, records or data
structures and they're just plain wrong, an equivalent to the Unix
"diff" utility may be just what's needed.
ok sturm@
"Module::Build" is a system for building, testing, and installing Perl
modules. It is meant to be a replacement for "ExtUtils::MakeMaker".
Developers may alter the behavior of the module through subclassing in a
much more straightforward way than with "MakeMaker". It also does not
require a "make" on your system, most of the "Module::Build" code is
pure-perl and written in a very cross-platform way.
ok sturm@
"ExtUtils::ParseXS" will compile XS code into C code by embedding the
constructs necessary to let C functions manipulate Perl values and
creates the glue necessary to let Perl access those functions.
ok sturm@
This module can build the C portions of Perl modules by invoking the
appropriate compilers and linkers in a cross-platform manner. It was
motivated by the "Module::Build" project, but may be useful for other
purposes as well. However, it is not intended as a general
cross-platform interface to all your C building needs.
ok sturm@
Class names in Perl often don't sound great when spoken, or look good
when written in prose. For this reason, we tend to say things like
"customer" or "basket" when we are referring to
"My::Site::User::Customer" or "My::Site::Shop::Basket". We thought it
would be nice if our classes knew what we would prefer to call them.
This module will add a "moniker" (and "plural_moniker") method to
"UNIVERSAL", and so to every class or module.
ok sturm@
This module generates SQL, while retaining complete control
over statement handles and uses the DBI interface. The
underlying idea is for this module to do what you mean,
based on the data structures you provide it. The big
advantage is that you don't have to modify your code every
time your data changes, as this module figures it out.
from Sam Smith <S at msmith.net>
B::DeObfuscate is a backend module for the Perl compiler that generates
perl source code, based on the internal compiled structure that perl
itself creates after parsing a program. It adds symbol renaming
functions to the B::Deparse module. An obfuscated program is already
parsed and interpreted correctly by the B::Deparse program.
Unfortunately, if the obfuscation involved variable renaming then the
resulting program also has obfuscated symbols.
ok sturm@
YAML is a generic data serialization language that is optimized for
human readability. It can be used to express the data structures of most
modern programming languages.
ok sturm@
Its possible to accidentally inherit an AUTOLOAD method. Often this
will happen if a class somewhere in the chain uses AutoLoader or defines
one of their own. This can lead to confusing error messages when method
lookups fail.
Sometimes you want to avoid this accidental inheritance. In that case,
inherit from Class::WhiteHole. All unhandled methods will produce
normal Perl error messages.
from Sam Smith <S at msmith.net>