If you want to be creative, and can actually stand the function prototypes, you can do this:
sub try (&@) {
my($code, $error_handler) = @_;
eval {
$code->();
};
$error_handler->() if $@;
}
sub catch (&) {
return @_;
}
The & allows you to pass code blocks directly without the sub keyword. You can then write:
my $msg;
try {
open (FILE, "strangefilename") || die "$!";
$msg = <FILE>;
} catch {
print "File could not be opened because of: $@\n";
$msg = "BAAAAH";
}
This code is from the perlsub perldoc page.