Seeing through Dave Rolsky's Exception::Class and
Sig::PackageScoped has let me make the following module, called
Exception::Handler.
In fact I rarely use $SIG{__DIE__} for exception handling, but the
concept of the module would be a bit interesting. Especially
eval { };
if ($@->isa('FooException')) {
# ...
} elsif ($@->isa('BarException')) {
# ...
} else {
# ...
}
code like this can be greatly simplified.
Any suggestions welcome, escpecially from gurus of exception, Matt
and Dave ;) See t/*.t for typical usage.
http://bulknews.net/lib/archives/Exception-Handler-0.01.tar.gz
NAME
Exception::Handler - Hierarchical exception handling
SYNOPSIS
use Exception::Class
'MyException',
'AnotherException' => { isa => 'MyException' },
'YetAnotherException' => { isa => 'AnotherException' },
'FooBarException';
use Exception::Handler
MyException => \&my_handler,
AnotherException => \&another_handler,
__DEFAULT__ => \&default_handler;
eval { MyException->throw }; # my_handler()
eval { AnotherException->throw; }; # another_handler()
eval { YetAnotherException->throw; }; # another_handler() : hierarchical
eval { FooBarException->throw; }; # default_handler()
sub my_handler {
my $exception = shift;
# ...
}
sub another_handler { }
sub default_handler { }
DESCRIPTION
Exception::Handler allows you to handle exception with various subs each
of which registered for an appropriate class of exception. This module
can nicely work with Dave Rolsky's Exception::Class and Grahamm Barr's
Error module.
TODO
* Lexical handler, which may be done via "local".
AUTHOR
Tatsuhiko Miyagawa <[EMAIL PROTECTED]>
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
SEE ALSO
Exception::Class, Sig::PackageScoped
--
Tatsuhiko Miyagawa <[EMAIL PROTECTED]>