File Coverage

blib/lib/Var/Mystic.pm
Criterion Covered Total %
statement 132 201 65.6
branch 26 54 48.1
condition 12 32 37.5
subroutine 24 27 88.8
pod n/a
total 194 314 61.7


line stmt bran cond sub pod time code
1             package Var::Mystic;
2              
3 9     9   944429 use 5.014; use warnings;
  9     9   82  
  9         39  
  9         14  
  9         343  
4              
5             our $VERSION = '0.000003';
6              
7 9     9   6580 use Keyword::Declare;
  9         898766  
  9         74  
8 9     9   5481 use Data::Dx ();
  9         1146097  
  9         305  
9 9     9   84 use Variable::Magic qw< wizard cast >;
  9         17  
  9         787  
10              
11 8     8   75 sub import {
  0         0  
12 0 50 50 8   0 keyword track ( 'here'? $scoped,
  0         0  
  0         0  
  8         133  
  8         456748  
  8         19  
  8         19  
13 0         0 /my|our|state/? $declarator,
  8         39  
  8         181  
14 0         0 ScalarAccess|Var $var,
  8         352  
15             '='? $assignment
16 0         0 ) {
  0         0  
  8         290  
  8         17  
17 0         0 state $next_ID = 1;
  8         231  
18 0         0 my $ID = 0;
  8         140  
19             if ($scoped) {
20 0         0 $ID = $next_ID++;
  0         0  
  8         154  
  8         20  
21 0         0 $^H{"Var::Mystic tracker: $ID"} = 1;
  8         502  
22 0         0 }
  8         154  
23              
24 0         0 my $sigil = substr($var,0,1);
  0         0  
  8         154  
  8         18  
25 0         0  
  8         15  
26 0         0 ( $declarator ? qq{$declarator $var;} : q{} )
  8         115  
27             .
28 0         0 ( $sigil eq '$' ? qq{ Var::Mystic::_scalar_setup(\\$var, '$var', $ID); }
  8         139  
29 0         0 : $sigil eq '@' ? qq{ Var::Mystic::_array_setup(\\$var, '$var', $ID); }
  8         18  
30 0         0 : $sigil eq '%' ? qq{ Var::Mystic::_hash_setup(\\$var, '$var', $ID); }
  8         14  
31 0 0       0 : qq{BEGIN { die 'Cannot track $var'; }}
  8 100       191  
32 0         0 )
  2         16  
33 0         0 .
  2         12  
34             ( $assignment ? qq{$var = } : q{} )
35             }
36 0         0  
  8         67  
37 8         177 # Legacy interface...
38 0 0 50 0   0 keyword mystic (Var $var) {{{ track my <{$var}> }}}
  0 0       0  
  0 0       0  
  0 0       0  
  8 0       34  
  8 100       84  
  0 50       0  
  0 100       0  
  0 100       0  
    50          
    50          
39 0         0 }
  8         29  
  0         0  
40 0         0  
  0         0  
41 1     1   9 sub unimport {
  0         0  
42 9 50 50 1   55 keyword track ( 'here'? ,
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  8         45  
  0         0  
  0         0  
  0         0  
  1         16  
  1         56824  
  1         3  
  1         2  
  1         2  
43 0         0 /my|our|state/? $declarator,
  8         236  
  1         5  
  1         2  
44 9     9   284319 ScalarAccess|Var $var,
  0         0  
  1         60  
45             '='? $assignment
46 0         0 ) {
  0         0  
  1         32  
  1         2  
47 9         70 return qq{$declarator $var = } if $declarator || $assignment;
  0         0  
  8         62  
  1         63  
48 0         0 return q{}
  8         335  
  1         20  
49 9     9   329816 }
50 0         0  
  0         0  
  1         20  
  1         2  
  1         21  
51 0 50 50 0   0 keyword mystic () {{{my}}}
  9         54  
  0         0  
  0         0  
  1         2  
  1         9  
  1         4  
  0         0  
  0         0  
52 0         0 }
  1         14  
  1         4  
  1         23  
53 9     9   279157  
54 0         0 sub _report {
  1         18  
55 0 0 0 50   0 return if substr($_[1],-12) eq 'Data/Dump.pm';
  1 50 33     26  
  50 100       181  
56 0         0  
  1         23  
57 9         59 state $prev = q{};
  1         6  
  35         68  
58 1         35 my $dump = Data::Dump::dump($_[-1]);
  35         135  
59 9     9   294532  
60 35 100       4315 if ($dump ne $prev) {
61 9     9   1270 no warnings 'redefine';
  9         19  
  9         6495  
62             local *Term::ANSIColor::colored = -t *STDERR ? \&Term::ANSIColor::colored
63 29 50   160   383 : sub { return shift };
  160         223659  
64 29         161 Data::Dx::_format_data( @_ );
65 29         199 $prev = $dump;
66             }
67 35         277 return;
68             }
69              
70             sub _scalar_setup {
71 6     6   58213 my ($scalar_ref, $name, $ID) = @_;
72              
73 6         23 my (undef, $file, $line) = caller();
74              
75 6         64 cast ${$scalar_ref}, wizard
76 25     25   312870 set => sub { my ($file, $line, $hints) = (caller 1)[1,2,10];
77 25 100 100     143 return if $ID && !exists $hints->{"Var::Mystic tracker: $ID"};
78 22         42 _report($line, $file, $name, q{}, ${$scalar_ref});
  22         76  
79             },
80 6         12 }
81              
82             sub _array_setup {
83 1     1   3947 my ($array_ref, $name, $ID) = @_;
84              
85 1         3 my (undef, $file, $line) = caller();
86              
87 1         11 cast @{$array_ref}, wizard
88 7     7   44957 set => sub { my ($file, $line, $hints) = (caller 1)[1,2,10];
89 7 50 33     24 return if $ID && !exists $hints->{"Var::Mystic tracker: $ID"};
90             cast my $result, wizard free => sub {
91 7         28 _report($line, $file, $name, q{}, $array_ref);
92 7         41 };
93 7         207 return \$result;
94             },
95 2     2   25455 clear => sub { my ($file, $line, $hints) = (caller 1)[1,2,10];
96 2 50 33     12 return if $ID && !exists $hints->{"Var::Mystic tracker: $ID"};
97             cast my $result, wizard free => sub {
98 2         9 _report($line, $file, $name, q{}, $array_ref);
99 2         15 };
100 2         82 return \$result;
101             },
102 1         2 }
103              
104             sub _hash_setup {
105 1     1   3935 my ($hash_ref, $name, $ID) = @_;
106              
107 1         3 my (undef, $file, $line) = caller();
108              
109 1         24 cast %{$hash_ref}, wizard
110 0     0   0 delete => sub { my ($file, $line, $hints) = (caller 1)[1,2,10];
111 0 0 0     0 return if $ID && !exists $hints->{"Var::Mystic tracker: $ID"};
112             cast my $result, wizard free => sub {
113 0         0 _report($line, $file, $name, q{}, $hash_ref);
114 0         0 };
115 0         0 return \$result;
116             },
117 17     17   16409 store => sub { my ($file, $line, $hints) = (caller 1)[1,2,10];
118 17 50 33     42 return if $ID && !exists $hints->{"Var::Mystic tracker: $ID"};
119             cast my $result, wizard free => sub {
120 17         65 _report($line, $file, $name, q{}, $hash_ref);
121 17         72 };
122 17         451 return \$result;
123             },
124 2     2   24519 clear => sub { my ($file, $line, $hints) = (caller 1)[1,2,10];
125 2 50 33     19 return if $ID && !exists $hints->{"Var::Mystic tracker: $ID"};
126             cast my $result, wizard free => sub {
127 2         7 _report($line, $file, $name, q{}, $hash_ref);
128 2         15 };
129 2         62 return \$result;
130             },
131 1         2 }
132              
133              
134              
135             1; # Magic true value required at end of module
136             __END__