File Coverage

blib/lib/Hash/Merge/Simple.pm
Criterion Covered Total %
statement 28 28 100.0
branch 6 8 75.0
condition 2 3 66.6
subroutine 6 6 100.0
pod 3 3 100.0
total 45 48 93.7


line stmt bran cond sub pod time code
1             package Hash::Merge::Simple;
2 4     4   561976 use strict;
  4         8  
  4         146  
3 4     4   16 use warnings;
  4         9  
  4         315  
4              
5             our $VERSION = '0.052';
6              
7 4     4   20 use Exporter ();
  4         10  
  4         1567  
8             our @ISA = qw/ Exporter /;
9             our @EXPORT_OK = qw/ merge clone_merge dclone_merge /;
10              
11             # This was stoled from Catalyst::Utils... thanks guys!
12             sub merge (@);
13             sub merge (@) {
14 34 50   34 1 206409 shift unless ref $_[0]; # Take care of the case we're called like Hash::Merge::Simple->merge(...)
15 34         50 my ($left, @right) = @_;
16              
17 34 50       44 return $left unless @right;
18              
19 34 100       59 return merge($left, merge(@right)) if @right > 1;
20              
21 22         52 my ($right) = @right;
22              
23 22         41 my %merge = %$left;
24              
25 22         39 for my $key (keys %$right) {
26              
27 34         42 my ($hr, $hl) = map { ref $_->{$key} eq 'HASH' } $right, $left;
  68         107  
28              
29 34 100 66     65 if ($hr and $hl){
30 1         4 $merge{$key} = merge($left->{$key}, $right->{$key});
31             }
32             else {
33 33         49 $merge{$key} = $right->{$key};
34             }
35             }
36              
37 22         59 return \%merge;
38             }
39              
40             sub clone_merge {
41 1     1 1 240593 require Clone;
42 1         5 my $result = merge @_;
43 1         36 return Clone::clone( $result );
44             }
45              
46             sub dclone_merge {
47 1     1 1 2237 require Storable;
48 1         6 my $result = merge @_;
49 1         102 return Storable::dclone( $result );
50             }
51              
52             1;
53              
54             __END__