For what it is worth - I would encourage you to check out the Error package
as well.

Rather than:

 eval { };
  if ($@->isa('FooException')) {
      # ...
  } elsif ($@->isa('BarException')) {
      # ...
  } else {
      # ...
  }

You would have:
    try {
        code;
    } catch FooException with {
        code for FooExceptions;
    } catch BarException with {
        code for BarExceptions;
    } otherwise {
    };

And you can throw exceptions with details on the nature of the exception:

    throw FooException ( -text => "You foo'ed at line bar", -value =>
$line );

and in the try block:

    try {
        do foo;
    } catch FooException with {
        my $exception=shift;
        print "Uh oh, we have a problem with foo: " . $exception->text;
    };

Jay

----- Original Message -----
From: "Tatsuhiko Miyagawa" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Cc: "Dave Rolsky" <[EMAIL PROTECTED]>; "Matt Sergeant" <[EMAIL PROTECTED]>
Sent: Friday, January 11, 2002 8:07 AM
Subject: RFC: Exception::Handler


> 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]>
>
>

Reply via email to