File Coverage

blib/lib/Hash/Merge/Extra.pm
Criterion Covered Total %
statement 91 91 100.0
branch 16 16 100.0
condition n/a
subroutine 10 10 100.0
pod n/a
total 117 117 100.0


line stmt bran cond sub pod time code
1             package Hash::Merge::Extra;
2              
3 8     8   425726 use strict;
  8         57  
  8         203  
4 8     8   34 use warnings FATAL => 'all';
  8         12  
  8         248  
5              
6 8     8   886 use Hash::Merge qw(_merge_hashes);
  8         18393  
  8         1796  
7              
8             our $VERSION = '0.06'; # Don't forget to change in pod below
9              
10             use constant L_ADDITIVE => {
11             'SCALAR' => {
12 3 100       1057 'SCALAR' => sub { defined $_[0] ? $_[0] : $_[1] },
13 2 100       1103 'ARRAY' => sub { defined $_[0] ? $_[0] : $_[1] },
14 2 100       1033 'HASH' => sub { defined $_[0] ? $_[0] : $_[1] },
15             },
16             'ARRAY' => {
17 1         472 'SCALAR' => sub { $_[0] },
18 1         476 'ARRAY' => sub { [ @{$_[0]}, @{$_[1]} ] },
  1         2  
  1         4  
19 1         472 'HASH' => sub { $_[0] },
20             },
21             'HASH' => {
22 1         467 'SCALAR' => sub { $_[0] },
23 1         437 'ARRAY' => sub { $_[0] },
24 1         487 'HASH' => sub { _merge_hashes(@_) },
25             },
26 8     8   51 };
  8         13  
  8         2131  
27              
28             use constant R_ADDITIVE => {
29             'SCALAR' => {
30 3 100       1090 'SCALAR' => sub { defined $_[1] ? $_[1] : $_[0] },
31 1         535 'ARRAY' => sub { $_[1] },
32 1         455 'HASH' => sub { $_[1] },
33             },
34             'ARRAY' => {
35 2 100       821 'SCALAR' => sub { defined $_[1] ? $_[1] : $_[0] },
36 1         446 'ARRAY' => sub { [ @{$_[1]}, @{$_[0]} ] },
  1         2  
  1         4  
37 1         434 'HASH' => sub { $_[1] },
38             },
39             'HASH' => {
40 2 100       794 'SCALAR' => sub { defined $_[1] ? $_[1] : $_[0] },
41 1         440 'ARRAY' => sub { $_[1] },
42 1         417 'HASH' => sub { _merge_hashes(@_) },
43             },
44 8     8   48 };
  8         10  
  8         1752  
45              
46             use constant L_OVERRIDE => {
47             'SCALAR' => {
48 2         693 'SCALAR' => sub { $_[0] },
49 1         608 'ARRAY' => sub { $_[0] },
50 1         500 'HASH' => sub { $_[0] },
51             },
52             'ARRAY' => {
53 1         533 'SCALAR' => sub { $_[0] },
54 1         504 'ARRAY' => sub { $_[0] },
55 1         472 'HASH' => sub { $_[0] },
56             },
57             'HASH' => {
58 1         454 'SCALAR' => sub { $_[0] },
59 1         521 'ARRAY' => sub { $_[0] },
60 1         590 'HASH' => sub { _merge_hashes(@_) },
61             },
62 8     8   63 };
  8         20  
  8         1673  
63              
64             use constant R_OVERRIDE => {
65             'SCALAR' => {
66 2         610 'SCALAR' => sub { $_[1] },
67 1         607 'ARRAY' => sub { $_[1] },
68 1         530 'HASH' => sub { $_[1] },
69             },
70             'ARRAY' => {
71 1         508 'SCALAR' => sub { $_[1] },
72 1         488 'ARRAY' => sub { $_[1] },
73 1         640 'HASH' => sub { $_[1] },
74             },
75             'HASH' => {
76 1         601 'SCALAR' => sub { $_[1] },
77 1         667 'ARRAY' => sub { $_[1] },
78 1         478 'HASH' => sub { _merge_hashes(@_) },
79             },
80 8     8   55 };
  8         18  
  8         1513  
81              
82             use constant L_REPLACE => {
83             'SCALAR' => {
84 1         601 'SCALAR' => sub { $_[0] },
85 1         577 'ARRAY' => sub { $_[0] },
86 1         478 'HASH' => sub { $_[0] },
87             },
88             'ARRAY' => {
89 1         452 'SCALAR' => sub { $_[0] },
90 1         464 'ARRAY' => sub { $_[0] },
91 1         427 'HASH' => sub { $_[0] },
92             },
93             'HASH' => {
94 1         420 'SCALAR' => sub { $_[0] },
95 1         449 'ARRAY' => sub { $_[0] },
96 1         482 'HASH' => sub { $_[0] },
97             },
98 8     8   51 };
  8         15  
  8         1697  
99              
100             use constant R_REPLACE => {
101             'SCALAR' => {
102 1         975 'SCALAR' => sub { $_[1] },
103 1         779 'ARRAY' => sub { $_[1] },
104 1         565 'HASH' => sub { $_[1] },
105             },
106             'ARRAY' => {
107 1         567 'SCALAR' => sub { $_[1] },
108 1         610 'ARRAY' => sub { $_[1] },
109 1         533 'HASH' => sub { $_[1] },
110             },
111             'HASH' => {
112 1         524 'SCALAR' => sub { $_[1] },
113 1         595 'ARRAY' => sub { $_[1] },
114 1         581 'HASH' => sub { $_[1] },
115             },
116 8     8   46 };
  8         14  
  8         1446  
117              
118             my %INDEX = (
119             L_ADDITIVE => L_ADDITIVE,
120             L_OVERRIDE => L_OVERRIDE,
121             L_REPLACE => L_REPLACE,
122              
123             R_ADDITIVE => R_ADDITIVE,
124             R_OVERRIDE => R_OVERRIDE,
125             R_REPLACE => R_REPLACE,
126             );
127              
128             sub import {
129 8     8   47 shift; # throw off package name
130              
131 8 100       40 for (@_ ? @_ : keys %INDEX) {
132 43 100       1685 unless (exists $INDEX{$_}) {
133 1         5 require Carp;
134 1         152 Carp::croak "Unable to register $_ (no such behavior)";
135             }
136 42         91 Hash::Merge::specify_behavior($INDEX{$_}, $_);
137             }
138             }
139              
140             1;
141              
142             __END__