in reply to Error handling

You can use eval to catch, and then do alternate tasks:

use warnings; use strict; my $ok = eval { blah() or die "damn thing failed!"; 1; }; if ($ok){ print "success\n"; } else { print "failed, doing something else\n"; } sub blah { # simulate a fail return 0; }

Now, the error will be in $@, but because there are situations where it can be reset before you get to it, it can be risky to do things like this:

eval { blah() or die "failed"; }; if ($@){ ... }

Regarding my first full example above, if an exception is thrown within the eval, it'll set $ok to undef, otherwise if all of the statements execute successfully, the 1 (ie. true) will be returned.

Inside of the else block, you could check to see what the error is:

if ($@ =~ /timeout/){ ... }

...but again, it's not wise to solely rely on that variable in all cases.