File Coverage

blib/lib/Devel/Monitor/Hash.pm
Criterion Covered Total %
statement 19 48 39.5
branch 2 10 20.0
condition n/a
subroutine 4 14 28.5
pod 0 1 0.0
total 25 73 34.2


line stmt bran cond sub pod time code
1             package Devel::Monitor::Hash;
2 1     1   5 use strict;
  1         2  
  1         34  
3 1     1   4 use warnings;
  1         2  
  1         97  
4            
5 1     1   5 use Devel::Monitor::Common qw(:all);
  1         1  
  1         908  
6            
7             our $id = 0;
8            
9             sub TIEHASH {
10 2     2   4 my ($class, $varRef, $id, $isCode) = @_;
11 2         4 my $self = {};
12 2         5 bless($self => $class);
13 2         10 $self->{Devel::Monitor::Common::F_VAR()} = {%$varRef};
14 2 50       47 if ($id) {
15 2         6 $self->{Devel::Monitor::Common::F_ID()} = $id;
16             } else {
17 0         0 $self->{Devel::Monitor::Common::F_ID()} = 'hash_'.++$id;
18             }
19 2         4 $self->{Devel::Monitor::Common::F_IS_CODE()} = $isCode;
20 2 50       5 if ($isCode) {
21 0         0 Devel::Monitor::Common::printMsg("MONITOR CODE HASH : ".$self->{Devel::Monitor::Common::F_ID()}."\n");
22             } else {
23 2         10 Devel::Monitor::Common::printMsg("MONITOR HASH : ".$self->{Devel::Monitor::Common::F_ID()}."\n");
24             }
25 2         15 return $self;
26             }
27            
28             sub DESTROY {
29 0     0     my $self = shift;
30 0 0         if ($self->{Devel::Monitor::Common::F_IS_CODE()}) {
31 0 0         Devel::Monitor::Common::printMsg("DESTROY CODE HASH : ".$self->{Devel::Monitor::Common::F_ID()}."\n") unless $self->{Devel::Monitor::Common::F_UNMONITORED()};
32             } else {
33 0 0         Devel::Monitor::Common::printMsg("DESTROY HASH : ".$self->{Devel::Monitor::Common::F_ID()}."\n") unless $self->{Devel::Monitor::Common::F_UNMONITORED()};
34             }
35             }
36            
37             sub unmonitor {
38 0     0 0   my ($varRef) = @_;
39 0           my $hashRef;
40             {
41 0           my $self = tied %$varRef;
  0            
42 0           $hashRef = $self->{Devel::Monitor::Common::F_VAR()};
43 0           $self->{Devel::Monitor::Common::F_UNMONITORED()} = 1;
44 0           Devel::Monitor::Common::printMsg("UNMONITOR HASH : ".$self->{Devel::Monitor::Common::F_ID()}."\n");
45             }
46 0           untie %$varRef;
47 0           %$varRef = %$hashRef;
48             }
49            
50             #Copy/Pasted from Tie::Hash.pm
51             #Added "->{Devel::Monitor::Common::F_VAR()}"
52 0     0     sub STORE { $_[0]->{Devel::Monitor::Common::F_VAR()}->{$_[1]} = $_[2] }
53 0     0     sub FETCH { $_[0]->{Devel::Monitor::Common::F_VAR()}->{$_[1]} }
54 0     0     sub FIRSTKEY { my $a = scalar keys %{$_[0]->{Devel::Monitor::Common::F_VAR()}}; each %{$_[0]->{Devel::Monitor::Common::F_VAR()}} }
  0            
  0            
  0            
55 0     0     sub NEXTKEY { each %{$_[0]->{Devel::Monitor::Common::F_VAR()}} }
  0            
56 0     0     sub EXISTS { exists $_[0]->{Devel::Monitor::Common::F_VAR()}->{$_[1]} }
57 0     0     sub DELETE { delete $_[0]->{Devel::Monitor::Common::F_VAR()}->{$_[1]} }
58 0     0     sub CLEAR { %{$_[0]->{Devel::Monitor::Common::F_VAR()}} = () }
  0            
59 0     0     sub SCALAR { scalar %{$_[0]->{Devel::Monitor::Common::F_VAR()}} }
  0            
60            
61             1;