File Coverage

lib/warnings/MaybeFatal.pm
Criterion Covered Total %
statement 31 33 93.9
branch 8 10 80.0
condition n/a
subroutine 11 11 100.0
pod n/a
total 50 54 92.5


line stmt bran cond sub pod time code
1 3     3   30154 use 5.008004;
  3         8  
  3         111  
2 3     3   16 use strict;
  3         5  
  3         73  
3 3     3   14 use warnings;
  3         13  
  3         247  
4              
5             package warnings::MaybeFatal;
6              
7             our $AUTHORITY = 'cpan:TOBYINK';
8             our $VERSION = '0.004';
9              
10             BEGIN {
11 3 50   3   54 if ( $] < 5.012 ) {
12 0         0 require Lexical::SealRequireHints;
13 0         0 Lexical::SealRequireHints->import;
14             }
15             };
16              
17 3     3   2311 use B::Hooks::EndOfScope;
  3         30325  
  3         19  
18 3     3   198 use Carp qw(croak);
  3         6  
  3         719  
19              
20             sub _my_hints
21             {
22 17     17   29 $^H |= 0x20000;
23 17         169 \%^H;
24             }
25              
26             sub import
27             {
28 8     8   5342 _my_hints->{+__PACKAGE__} = 1;
29            
30             # Keep original signal handler
31 8         22 my $orig = $SIG{__WARN__};
32 8         10 my @warnings;
33            
34             $SIG{__WARN__} = sub {
35 8 50   8   561 _my_hints->{+__PACKAGE__}
    100          
36             ? push(@warnings, $_[0])
37             : $orig
38             ? $orig->(@_)
39             : warn(@_);
40 8         40 };
41            
42             on_scope_end {
43 8     8   506 $SIG{__WARN__} = $orig;
44 8 100       51 if (@warnings == 1)
    100          
45             {
46 4         85 die($warnings[0]);
47             }
48             elsif (@warnings)
49             {
50 1         6 warn($_) for @warnings;
51 1         11 local $Carp::CarpLevel = $Carp::CarpLevel + 1;
52 1         180 croak("Compile time warnings");
53             }
54 8         40 };
55             }
56              
57             sub unimport
58             {
59 1     1   35 _my_hints->{+__PACKAGE__} = 0;
60             }
61              
62             1;
63              
64             __END__