File Coverage

blib/lib/Exception/Class/Try/Catch.pm
Criterion Covered Total %
statement 33 33 100.0
branch 6 6 100.0
condition 3 3 100.0
subroutine 10 10 100.0
pod 0 1 0.0
total 52 53 98.1


line stmt bran cond sub pod time code
1             # Copyright (c) 2017 by Pali
2              
3             package Exception::Class::Try::Catch;
4              
5 1     1   20706 use 5.006;
  1         3  
6 1     1   5 use strict;
  1         1  
  1         17  
7 1     1   3 use warnings;
  1         5  
  1         40  
8              
9             our $VERSION = '0.1';
10              
11 1     1   3 use Carp;
  1         1  
  1         68  
12 1     1   431 use Exception::Class::Base;
  1         6486  
  1         36  
13 1     1   5 use Exporter 5.57 'import';
  1         13  
  1         28  
14 1     1   3 use Scalar::Util;
  1         1  
  1         28  
15 1     1   459 use Try::Catch qw(try);
  1         525  
  1         174  
16              
17             $Carp::Internal{+__PACKAGE__} = 1;
18              
19             our @EXPORT_OK = qw(try catch);
20             our @EXPORT = @EXPORT_OK;
21              
22             sub catch (&;@) {
23 17     17 0 16470 my $block = $_[0];
24             $_[0] = sub {
25 15     15   2187 my $error = $_[0];
26 15 100 100     99 if (Scalar::Util::blessed($error) and not $error->isa('Exception::Class::Base')) {
27 3 100       19 $error = $error->as_string() if $error->can('as_string');
28 3         30 $error = "$error";
29             }
30 15 100       35 if (not Scalar::Util::blessed($error)) {
31 8         18 $_[0] = $_ = Exception::Class::Base->new($error);
32             }
33 15         1396 goto &$block;
34 17         41 };
35 17         40 goto &Try::Catch::catch;
36             }
37              
38             1;
39             __END__