I've been working on a Perl module that makes sending email messages a breeze, but one problem I had is that the Perl module MIME::Lite has a nasty way of failing when something goes wrong. I could not "catch" it's errors with die
or warn
, so after a little research, I found out how to deal with this problem using eval
. According to one text, using eval is the only mechanism Perl has for exception handling.
Here's what I was doing that didn't work:
$msg->send || die ""
(where $msg is a reference to a MIME::Lite object). Whenever an SMTP error occurred, my program stopped completely, which is obviously very bad, especially when you're running inside a loop, trying to send an email to 7,000 subscribers.
Here's the code that fixed the problem:
eval { $msg->send; }; warn $@ if $@;
The eval
function let me trap the error being thrown by the MIME::Lite code, print an error message with the warn $@ if $@
syntax, and most importantly, keep my program running.
I'm not an expert on this yet, but at least it's something to let me deal with simple exceptions like this.