NAME
Error::Unhandled - a Module for letting Errors do their own handling
SYNOPSIS
use Error qw(:try);
use Error::Unhandled;
try {
&foo;
} otherwise {
my $E = shift;
print "I caught:\n".$E->stringify."\n\n";
};
&foo;
sub foo {
throw Error::Unhandled(unhandled => sub {print "No one handled this.\n"; exit});
}
DESCRIPTION
While doing ASP programming, I wanted to use an object oriented exception handling system. Graham Barr pointed me at Error.pm
, which handled almost everything I needed. It was missing, however, a way for exceptions to define their own default error handling behavior. This can be very useful when ASP programming - someone using your object can decide to implement their own error handling routines, but if they don't the user will at least get a semi-informative message in their browser. After trying several different approaches, I ended up with a subclass of Error
titled Error::Unhandled
.
The only difference in behavior between Error::Unhandled
and Error
is what happens when throw
is called. The implementation of throw
in Error::Unhandled
uses caller
to search the call stack, looking for Error::subs::try
. If it finds one, it throws the exception as per normal behavior. If it doesn't find one, it calls $self->unhandled
. Before doing that, however, it checks to see if the element unhandled
is defined in its hash. If it is and it is a reference to a subroutine, it calls that instead. Note that if the element unhandled
is present and is not a reference to a subroutine, throw
will not call $self->unhandled
. Finally, after all of that returns, throw
will throw the exception as per normal behavior. If you don't want it to throw the exception, call exit
or die
within your unhandled
subroutine.
It is, of course, also possible (and recommended in many situations) to sub class Error::Unhandled
and provide a class-defined implementation of unhandled
. Also note that both the instance-defined and class-defined unhandled
methods receive $self
as their first parameter.
Installation instructions
This module requires Error
, available from CPAN.
AUTHOR
Toby Everett, teverett@alascom.att.com