File Coverage

blib/lib/Acme/Snark.pm
Criterion Covered Total %
statement 27 55 49.0
branch 11 14 78.5
condition 4 6 66.6
subroutine 9 23 39.1
pod n/a
total 51 98 52.0


line stmt bran cond sub pod time code
1             package Acme::Snark;
2              
3 1     1   516 use strict;
  1         2  
  1         29  
4 1     1   4 use vars qw($VERSION);
  1         2  
  1         746  
5             $VERSION = '0.04';
6              
7             my %stash;
8              
9             sub TIESCALAR {
10 3     3   55 my $foo;
11 3         12 return bless \$foo, 'Acme::Snark';
12             }
13              
14             sub FETCH {
15 26     26   85 my $t_obj = {value => ${$_[0]} };
  26         54  
16 26         49 bless($t_obj, 'Acme::Snark::HONK');
17 26         120 return $t_obj;
18             }
19              
20             sub STORE {
21 9 100 66 9   83 if (defined($_[1]) && !$_[1]) {
    50          
22 6         14 $stash{'>' . $_[1] . '<'}++;
23             }
24             elsif (!defined($_[1])) {
25 3         6 $stash{'<>'}++;
26             }
27 9         9 ${$_[0]} = $_[1];
  9         30  
28             }
29              
30             package Acme::Snark::HONK;
31              
32             use overload
33             q{bool} => sub {
34 6 100 66 6   12 if (defined($_[0]->{value}) && !$_[0]->{value}) {
    50          
35            
36 4 100       6 return $stash{'>'.$_[0]->{value}.'<'} > 2 ? 1 : $_[0]->{value};
37             }
38             elsif (!defined($_[0]->{value})) {
39 2 100       9 return $stash{'<>'} > 2 ? 1 : 0;
40             }
41             else {
42 0         0 return $_[0]->{value};
43             }
44             },
45 1     1   4 '+' => sub {my @a=&rev; $a[0] + $a[1]},
  1         4  
46 0     0   0 '-' => sub {my @a=&rev; $a[0] - $a[1]},
  0         0  
47 0     0   0 '/' => sub {my @a=&rev; $a[0] / $a[1]},
  0         0  
48 0     0   0 '*' => sub {my @a=&rev; $a[0] * $a[1]},
  0         0  
49 0     0   0 '**' => sub {my @a=&rev; $a[0] **$a[1]},
  0         0  
50 0     0   0 '.' => sub {my @a=&rev; $a[0] . $a[1]},
  0         0  
51 0     0   0 '%' => sub {my @a=&rev; $a[0] % $a[1]},
  0         0  
52 0     0   0 'x' => sub {my @a=&rev; $a[0] x $a[1]},
  0         0  
53 0     0   0 '&' => sub {my @a=&rev; $a[0] & $a[1]},
  0         0  
54 0     0   0 '^' => sub {my @a=&rev; $a[0] ^ $a[1]},
  0         0  
55 0     0   0 '|' => sub {my @a=&rev; $a[0] | $a[1]},
  0         0  
56 0     0   0 '<=>' => sub {my @a=&rev; $a[0]<=>$a[1]},
  0         0  
57 0     0   0 'cmp' => sub {my @a=&rev; $a[0]cmp$a[1]},
  0         0  
58 0     0   0 q{+0} => sub {$_[0]->{value}},
59 0     0   0 q{""} => sub {$_[0]->{value}},
60 1     1   1648 ;
  1         1269  
  1         33  
61              
62             sub rev {
63 1 50   1   5 if ($_[2]) {
64 0         0 return ($_[1], $_[0]->{value});
65             }
66             else {
67 1         3 return ($_[0]->{value}, $_[1]);
68             }
69             }
70              
71             1;
72             __END__