Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

Ovid (2709)

  (email not shown publicly)
AOL IM: ovidperl (Add Buddy, Send Message)

Stuff with the Perl Foundation. A couple of patches in the Perl core. A few CPAN modules. That about sums it up.

Journal of Ovid (2709)

Tuesday January 28, 2003
05:59 PM

Grokking exceptions

[ #10249 ]

I didn't program Java for very long, so I really never quite understood the best way to handle exceptions. (The one thing that I miss in Perl is compile-time checking of whether or not the exceptions are caught, but that's a side issue). Recently, I was struggling to get an API just write (sic) and the simplest way to do it seemed to be the following:

my $data = $self->__validate_added_data;
if ( UNIVERSAL::isa( $data, 'Foo::Form' ) ) {
    # add the data
else {
    # process the error

In other words, if I get back a valid Form object, I can add the data to the database. Otherwise, I have a hashref that contains the form error information. This error information is user error -- not program error. As a result, I don't want to die or warn, yet variants of those are typical Perl error handling mechanisms. Further, I have a method that returns two fundamentally different types of data: and object or a hashref. I finally started using the module and now use try/catch blocks to handle the types of errors that I need.

try {
    my $data = $self->__validate_added_data;
    # add the data
catch FormValidationError with {
    # process the error

Combining this with Test::Exception has made my tests simpler and my code more self-documenting. I'm going to have to dig up some resources on "Best Practices" with exception handling. I like this.

Hmm ... I think I'll post this on Perlmonks and see what they have to say.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
More | Login | Reply
Loading... please wait.
  • FWIW, I've noticed more discussion of whether checked exceptions in Java are worth the effort, particularly since they're not implemented in C#. There's a good writeup [] on the issues from Bruce Eckel, along with some related discussion [].
    • Absolutely wonderful writeup! That definitely makes the think that checked exceptions might not be the WunderTool that I thought. The problem appears to lie in programmers being pressed for time and thus "swallowing" exceptions with the intent to come back to them later. We all know what a lie "I'll do it tomorrow" is :)

      try {
      } catch (SomeException e) {} /* exception swallowed */

      Knowing full well that I'm often under the gun at work, I could easily see myself doing t

  • Watch out for the closures issue with I wrote about this in my exceptions talk here [].