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