File Coverage

blib/lib/Error/Pure/NoDie.pm
Criterion Covered Total %
statement 31 31 100.0
branch 4 4 100.0
condition 2 3 66.6
subroutine 8 8 100.0
pod 1 1 100.0
total 46 47 97.8


line stmt bran cond sub pod time code
1             package Error::Pure::NoDie;
2              
3             # Pragmas.
4 3     3   62901 use base qw(Exporter);
  3         7  
  3         293  
5 3     3   16 use strict;
  3         6  
  3         58  
6 3     3   15 use warnings;
  3         18  
  3         89  
7              
8             # Modules.
9 3     3   1663 use Error::Pure::Utils qw(err_helper);
  3         11475  
  3         102  
10 3     3   1960 use List::MoreUtils qw(none);
  3         25704  
  3         27  
11 3     3   1678 use Readonly;
  3         7  
  3         1029  
12              
13             # Version.
14             our $VERSION = 0.04;
15              
16             # Constants.
17             Readonly::Array our @EXPORT_OK => qw(err);
18             Readonly::Scalar my $EMPTY_STR => q{};
19             Readonly::Scalar my $EVAL => 'eval {...}';
20              
21             # Ignore die signal.
22             $SIG{__DIE__} = 'IGNORE';
23              
24             # Process error.
25             sub err {
26 7     7 1 3099 my @msg = @_;
27              
28             # Get errors structure.
29 7         23 my @errors = err_helper(@msg);
30              
31             # Error messages.
32 7         1502 chomp $errors[-1]->{'msg'}->[0];
33              
34             # Finalize in main on last err.
35 7         12 my $stack_ar = $errors[-1]->{'stack'};
36 7 100 66     37 if ($stack_ar->[-1]->{'class'} eq 'main'
37 13 100   13   58 && none { $_ eq $EVAL || $_ =~ /^eval '/ms }
38 13         49 map { $_->{'sub'} } @{$stack_ar}) {
  7         14  
39              
40 2         4 print join $EMPTY_STR, @{$errors[-1]->{'msg'}}, "\n";
  2         12  
41              
42             # Die for eval.
43             } else {
44 5         8 my $e = $errors[-1]->{'msg'}->[0];
45 5         31 die "$e\n";
46             }
47              
48 2         28 return;
49             }
50              
51             1;
52              
53             __END__