Perl's global destruction is a little tricky to deal with WRT finalizers
because it's not ordered and objects can sometimes disappear.
Writing defensive destructors is hard and annoying, and usually if global
destruction is happenning you only need the destructors that free up non
process local resources to actually execute.
For these constructors you can avoid the mess by simply bailing out if global
destruction is in effect.
Perl has changed over time, gaining new features, new functions, increasing its
flexibility, and reducing the impact on the C namespace environment (reduced
pollution). The header file, typically ppport.h, written by this module attempts
to bring some of the newer Perl features to older versions of Perl, so that you
can worry less about keeping track of old releases, but users can still reap
the benefit.
Why you should use ppport.h in modern code: so that your code will work with
the widest range of Perl interpreters possible, without significant additional
work.
Why you should attempt older code to fully use ppport.h: because the reduced
pollution of newer Perl versions is an important thing, so important that the
old polluting ways of original Perl modules will not be supported very far into
the future, and your module will almost certainly break! By adapting to it now,
you'll gain compatibility and a sense of having done the electronic ecology
some good.
This is an interactive shell for Perl, commonly known as a REPL -
Read, Evaluate, Print, Loop. The shell provides for rapid development
or testing of code without the need to create a temporary source code
file.
Through a plugin system, many features are available on demand. You
can also tailor the environment through the use of profiles and run
control files, for example to pre-load certain Perl modules when
working on a particular project.
This module provides a single function, refcount(), which obtains the
reference count of the object being pointed to by the passed reference
value.
This module can be used to more easily spot the place where a program or a
module generates errors. Its use is extremely simple, reduced to just'use'ing
it.
This is achieved by modifying the functions warn() and die() in order to
replace the standard messages by complete stack traces that precisely indicates
how and where the error or warning occurred. Other than this, their use should
stay unchanged, even when using die() inside eval().
ptkdb is a debugger for perl that uses Perl/Tk for a user interface.
Features include:
Hot Variable Inspection
Breakpoint Control Panel
Expression List
Subroutine Tree
To debug a script using ptkdb invoke perl like this:
perl -d:ptkdb myscript.pl
ptkdb can easily be used to debug CGI scripts if your web server box is
capable of running Perl/Tk applications. Just change the shebang line of your
scripts to:
#! /usr/bin/perl -w -d:ptkdb
Traces SAX events in a program. Works by applying Devel::TraceCalls
to a tracer on the desired classes for all known SAX event types
(according to XML::SAX::EventMethodMaker and XML::SAX::Machines).
The "Catalyst::Devel" package includes a variety of modules useful for
the development of Catalyst applications, but not required to run them.
This is intended to make it easier to deploy Catalyst apps. The runtime
parts of Catalyst are now known as "Catalyst::Runtime".
"Catalyst::Devel" includes the Catalyst::Helper system, which autogenerates
scripts and tests; Module::Install::Catalyst, a Module::Install extension
for Catalyst; and requirements for a variety of development-related modules.
The documentation remains with Catalyst::Runtime.
This module generates a Clover compatible coverage xml file which can
be used in a variety of continuous integration software offerings.
It is designed to be called from the cover program distributed with
Devel::Cover.
Devel::Size can only report the size of a single element or the total size of a
structure (array, hash etc). This module enhances Devel::Size by giving you the
ability to generate a full size report for each element in a structure.
You have full control over how the generated text report looks like, and where
you want to output it. In addition, the method track_size allows you to get at
the raw data that is used to generate the report for even more flexibility.