qbit
view release on metacpan or search on metacpan
lib/qbit/Exceptions.pm view on Meta::CPAN
use base qw(Exporter);
BEGIN {
our (@EXPORT, @EXPORT_OK);
@EXPORT = qw(try catch with finally throw);
@EXPORT_OK = @EXPORT;
}
sub try(&;$) {
my ($sub, $catch) = @_;
eval {$sub->()};
my $cur_catch = $catch;
my $find_catch = !defined($catch) || $catch->[0] eq '::FINALLY::';
my $first_exception = '';
if ($@) {
$@ = Exception::SysDie->new($@)
lib/qbit/Exceptions.pm view on Meta::CPAN
while ref($cur_catch) && defined($cur_catch) && $cur_catch->[0] ne '::FINALLY::';
die("Expected semicolon after catch block (" . join(", ", (caller())[1, 2]) . ")\n")
if defined($cur_catch) && ref($cur_catch) ne 'ARRAY';
$cur_catch->[1]($first_exception) if defined($cur_catch);
die $@ if $@ && !$find_catch;
}
sub catch(&;$) {
return [Exception => @_];
}
sub with(&;$) {
return @_;
}
sub finally(&;$) {
if (defined($_[1])) {die("Expected semicolon after finally block (" . join(", ", (caller())[1, 2]) . ")\n");}
return ['::FINALLY::' => @_];
}
sub throw($) {
my ($exception) = @_;
$exception = Exception->new($exception) unless ref($exception);
die $exception;
}
( run in 0.700 second using v1.01-cache-2.11-cpan-49f99fa48dc )