File Coverage

lib/Rex/Helper/Hash.pm
Criterion Covered Total %
statement 33 33 100.0
branch 7 8 87.5
condition n/a
subroutine 5 5 100.0
pod 0 1 0.0
total 45 47 95.7


line stmt bran cond sub pod time code
1             #
2             # (c) Jan Gehring
3             #
4              
5             package Rex::Helper::Hash;
6              
7 93     93   70780 use v5.12.5;
  93         329  
8 93     93   525 use warnings;
  93         228  
  93         4861  
9              
10             our $VERSION = '1.14.3'; # VERSION
11              
12             require Exporter;
13 93     93   694 use base qw(Exporter);
  93         200  
  93         7768  
14 93     93   588 use vars qw(@EXPORT);
  93         358  
  93         32513  
15              
16             @EXPORT = qw(hash_flatten);
17              
18             sub hash_flatten {
19 90     90 0 11645 my ( $in, $out, $sep, @super_keys ) = @_;
20              
21 90 100       284 if ( ref($in) eq "HASH" ) {
    50          
22 87         156 for my $key ( keys %{$in} ) {
  87         1117  
23 397         655 push @super_keys, $key;
24 397 100       757 if ( ref( $in->{$key} ) ) {
25 38         190 hash_flatten( $in->{$key}, $out, $sep, @super_keys );
26             }
27             else {
28 359         663 my $new_key_name = join( $sep, @super_keys );
29 359         964 $new_key_name =~ s/[^A-Za-z0-9_]/_/g;
30 359         1670 $out->{$new_key_name} = $in->{$key};
31             }
32 397         849 pop @super_keys;
33             }
34             }
35             elsif ( ref($in) eq "ARRAY" ) {
36 3         6 my $counter = 0;
37 3         4 for my $val ( @{$in} ) {
  3         6  
38 10 100       16 if ( ref($val) ) {
39 2         3 push @super_keys, $counter;
40 2         4 hash_flatten( $val, $out, $sep, @super_keys );
41 2         19 pop @super_keys;
42             }
43             else {
44 8         20 my $new_key_name = join( $sep, @super_keys ) . "_$counter";
45 8         15 $new_key_name =~ s/[^A-Za-z0-9_]/_/g;
46 8         18 $out->{$new_key_name} = $val;
47             }
48 10         19 $counter++;
49             }
50             }
51             }
52              
53             1;