File Coverage

blib/lib/Error/Pure/Die.pm
Criterion Covered Total %
statement 29 30 96.6
branch 4 4 100.0
condition 2 3 66.6
subroutine 8 8 100.0
pod 1 1 100.0
total 44 46 95.6


line stmt bran cond sub pod time code
1             package Error::Pure::Die;
2              
3 7     7   169460 use base qw(Exporter);
  7         17  
  7         1298  
4 7     7   67 use strict;
  7         25  
  7         216  
5 7     7   35 use warnings;
  7         13  
  7         502  
6              
7 7     7   2130 use Error::Pure::Utils qw(err_helper);
  7         18  
  7         228  
8 7     7   837 use List::Util qw(none);
  7         34  
  7         920  
9 7     7   41 use Readonly;
  7         17  
  7         3091  
10              
11             our $VERSION = 0.34;
12              
13             Readonly::Array our @EXPORT_OK => qw(err);
14             Readonly::Scalar my $EVAL => 'eval {...}';
15             Readonly::Scalar my $EMPTY_STR => q{};
16              
17             # Process error.
18             sub err {
19 16     16 1 342328 my @msg = @_;
20              
21             # Get errors structure.
22 16         60 my @errors = err_helper(@msg);
23              
24             # Finalize in main on last err.
25 16         37 my $stack_ar = $errors[-1]->{'stack'};
26 16 100 66     112 if ($stack_ar->[-1]->{'class'} eq 'main'
27 30 100   30   122 && none { $_ eq $EVAL || $_ =~ /^eval '/ms }
28 30         112 map { $_->{'sub'} } @{$stack_ar}) {
  16         57  
29              
30 2         4 my $die = (join $EMPTY_STR, @{$errors[-1]->{'msg'}}).
  2         11  
31             " at $stack_ar->[0]->{'prog'} line ".
32             "$stack_ar->[0]->{'line'}.";
33 2         37 die "$die\n";
34              
35             # Die for eval.
36             } else {
37 14         190 die "$errors[-1]->{'msg'}->[0]\n";
38             }
39              
40 0           return;
41             }
42              
43             1;
44              
45             __END__