What is the best way to handle exceptions in Perl?

The consensus of the Perl community seems to be that Try::Tiny is the preferred way of doing exception handling. The “lenient policy” you refer to is probably due to a combination of:

  • Perl not being a fully object-oriented language. (e.g. in contrast to Java where
    you can’t avoid dealing with exceptions.)
  • The background of many Perl developers. (Languages like C1 and shell don’t have
    exception mechanisms.)
  • The kind of tasks people tend to use Perl for. (Small scripts for text munging and
    report generation where exception handling isn’t needed.)
  • Perl not having a (good) built-in exception mechanism.

Note that the last item means that you’ll see a lot of code like this:

eval { something() };
if ($@) {
    warn "Oh no! [$@]\n";
}

That’s exception handling even though it doesn’t use try/catch syntax. It’s fragile, though, and will break in a number of subtle edge cases that most people don’t think about. Try::Tiny and the other exception handling modules on CPAN were written to make it easier to get right.

1. C does have setjmp() and longjmp(), which can be used for a very crude form of exception handling.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)