Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: Best Practices for Exception Handling

by adrianh (Chancellor)
on Jan 29, 2003 at 11:47 UTC ( #230921=note: print w/ replies, xml ) Need Help??


in reply to Re: Best Practices for Exception Handling
in thread Best Practices for Exception Handling

I'd add another vote for Exception::Class. It allows exceptions classes to be declared quickly and easily and has become my fave since discovering its existance.

I tend to have a single module that declares all my exceptions. So for my Foo application I'd have something like:

package Foo::Exceptions; use strict; use warnings; use Exception::Class ( 'Foo::Exception::DBI' => { description => 'DBI Error', # error => $DBI::errstr, }, 'Foo::Exception::DBI::Dupe' => { description => 'Duplicate key', isa => 'Foo::Exception::DBI', # error => name of duplicate key, }, 'Foo::Exception::Dupe' => { description => 'Duplicate entry', fields => [ 'name' ], # error => value of duplicate field }, # etc. );

Comments are because Exception::Class objects have a default "error" field and I like to document what that should be used for where I declare the class.

Throw exceptions like this:

Foo::Exception::DBI->throw($DBI::errstr) Foo::Exception::Dupe->throw(name => $name, error => $value);

Because of the closure issues raised by thraxil, I use the eval / if idiom instead of any of the modules that provide extra try/catch syntax.

eval {$foo->something_that_might_die}; if (ref($@)) { if ($@->isa('Foo::Exception::Dupe') ) { warn "duplicate entry ", $@->name, " ($@)\n"; undef $@; }; }; die $@ if $@;


Comment on Re^2: Best Practices for Exception Handling
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://230921]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (7)
As of 2015-07-29 05:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (260 votes), past polls