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