File Coverage

blib/lib/Hash/Diff.pm
Criterion Covered Total %
statement 30 31 96.7
branch 9 10 90.0
condition 11 12 91.6
subroutine 8 8 100.0
pod 2 2 100.0
total 60 63 95.2


line stmt bran cond sub pod time code
1             package Hash::Diff;
2              
3 4     4   63623 use strict;
  4         9  
  4         121  
4 4     4   16 use warnings;
  4         7  
  4         125  
5 4     4   15 use Carp;
  4         8  
  4         388  
6 4     4   2031 use Hash::Merge;
  4         7503  
  4         159  
7              
8 4     4   17 use base 'Exporter';
  4         5  
  4         211  
9 4     4   16 use vars qw($VERSION @ISA @EXPORT_OK %EXPORT_TAGS);
  4         5  
  4         913  
10              
11             $VERSION = 0.009;
12             @EXPORT_OK = qw( diff left_diff );
13              
14             sub left_diff {
15 24     24 1 21 my ($h1, $h2) = @_;
16 24         21 my $rh = {}; # return_hash
17            
18 24         19 foreach my $k (keys %{$h1}) {
  24         46  
19 31 100 66     191 if (not defined $h1->{$k} and exists $h2->{$k} and not defined $h2->{$k}) {
    100 100        
    100 100        
      100        
20             # Empty
21             }
22             elsif (ref $h1->{$k} eq 'HASH') {
23 6 50       11 if (ref $h2->{$k} eq 'HASH') {
24 6         16 my $d = left_diff($h1->{$k}, $h2->{$k});
25 6 100       42 $rh->{$k} = $d if (%$d);
26             }
27             else {
28 0         0 $rh->{$k} = $h1->{$k}
29             }
30             }
31             elsif ((!defined $h1->{$k})||(!defined $h2->{$k})||($h1->{$k} ne $h2->{$k})) {
32 13         20 $rh->{$k} = $h1->{$k}
33             }
34             }
35            
36 24         76 return $rh;
37              
38             }
39              
40             sub diff {
41 9     9 1 8627 my ($h1, $h2) = @_;
42              
43 9         20 return Hash::Merge::merge(left_diff($h1,$h2),left_diff($h2,$h1));
44             }
45              
46              
47             1;
48              
49             __END__