Try-Catch
view release on metacpan or search on metacpan
lib/Try/Catch.pm view on Meta::CPAN
use Carp;
$Carp::Internal{+__PACKAGE__}++;
use base 'Exporter';
our @EXPORT = our @EXPORT_OK = qw(try catch finally);
our $VERSION = '1.1.0';
sub _default_catch {
croak $_[0];
}
sub try(&;@) {
my $wantarray = wantarray;
my $try = shift;
my $caller = pop;
my $finally = pop;
my $catch = pop;
if (!$caller || $caller ne __PACKAGE__){
croak "syntax error after try block \n" .
"usage : \n" .
"try { ... } catch { ... }; \n" .
lib/Try/Catch.pm view on Meta::CPAN
if ($finally) {
$@ = $prev_error;
$finally->( $fail ? $error : () );
}
$@ = $prev_error;
return $wantarray ? @ret : $ret[0];
}
sub catch(&;@) {
croak 'Useless bare catch()' unless wantarray;
if (@_ > 1){
croak "syntax error after catch block - maybe a missing semicolon"
if !$_[2] || $_[2] ne __PACKAGE__;
} else {
return ( shift, undef, __PACKAGE__);
}
return (@_);
}
sub finally(&;@) {
croak 'Useless bare finally()' unless wantarray;
if (@_ > 1) {
croak "syntax error after finally block - maybe a missing semicolon";
}
return ( shift, __PACKAGE__ );
}
1;
__END__
( run in 1.187 second using v1.01-cache-2.11-cpan-49f99fa48dc )