perlquestion
Ovid
<p>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:</p>
<code>
my $data = $self->__validate_added_data;
if ( UNIVERSAL::isa( $data, 'Foo::Form' ) ) {
# add the data
}
else {
# process the error
}
</code>
<p>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 [cpan://Error] module and now use try/catch blocks to handle the types of errors that I need.</p>
<code>
try {
my $data = $self->__validate_added_data;
# add the data
}
catch FormValidationError with {
# process the error
};
</code>
<p>Combining this with [cpan://Test::Exception] has made my tests simpler and my code more self-documenting. However, I'm not entirely sure what are "best practices" for exception handling in this manner. Can anyone offer their wisdom?</p>
<p>Cheers,<br />
<a href="/index.pl?node=Ovid&lastnode_id=1072">Ovid</a></p>
<p><small>New address of <a href="http://users.easystreet.com/ovid/cgi_course/">my CGI Course</a>.<br />
[http://users.easystreet.com/ovid/philosophy/decency.txt|Silence is Evil] (feel free to copy and distribute widely - note copyright text)</small></p>