File Coverage

lib/Unknown/Values.pm
Criterion Covered Total %
statement 40 41 97.5
branch 7 8 87.5
condition 5 6 83.3
subroutine 12 12 100.0
pod 1 1 100.0
total 65 68 95.5


line stmt bran cond sub pod time code
1 6     6   827621 use strict;
  6         80  
  6         192  
2 6     6   31 use warnings;
  6         11  
  6         315  
3              
4             # ABSTRACT: Use 'unknown' values instead of undef ones
5              
6             package Unknown::Values;
7             $Unknown::Values::VERSION = '0.100';
8 6     6   163 use 5.01000;
  6         20  
9 6     6   2383 use Unknown::Values::Instance;
  6         15  
  6         210  
10 6     6   2478 use Unknown::Values::Instance::Fatal;
  6         14  
  6         168  
11 6     6   2464 use Unknown::Values::Instance::Object;
  6         14  
  6         147  
12 6     6   38 use Carp ();
  6         11  
  6         107  
13              
14 6     6   30 use Scalar::Util 'blessed';
  6         9  
  6         1042  
15              
16             sub import {
17 8     8   6426 my $class = shift;
18 8         49 my $caller = caller;
19 8         186 my $unknown_class = 'Unknown::Values::Instance';
20 8 100       58 if (@_) {
21 2 100       10 if ( ':FATAL' eq $_[0] ) {
    50          
22 1         3 $unknown_class = 'Unknown::Values::Instance::Fatal';
23             }
24             elsif ( ':OBJECT' eq $_[0] ) {
25 1         2 $unknown_class = 'Unknown::Values::Instance::Object';
26             }
27             else {
28 0         0 Carp::croak("I don't know how to create an Unknown::Values object of type '$_[0]'");
29             }
30             }
31 8         43 my $unknown = $unknown_class->new;
32 8         22 my $unknown_sub = "${caller}::unknown";
33 8         26 my $is_unknown_sub = "${caller}::is_unknown";
34 6     6   45 no strict 'refs';
  6         16  
  6         1120  
35 8     95   57 *$unknown_sub = sub {$unknown};
  95         20337  
36 8         7009 *$is_unknown_sub = \&is_unknown;
37             }
38              
39             sub is_unknown(_) {
40 110 100 66 110 1 5801 defined $_[0]
      100        
41             && blessed( $_[0] )
42             && (
43             # Unknown::Values::Instance::Object overrides isa()
44             ( 'Unknown::Values::Instance::Object' eq ref $_[0] ) || $_[0]->isa("Unknown::Values::Instance")
45             );
46             }
47              
48             1;
49              
50             __END__