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   71647 use v5.12.5;
  93         336  
8 93     93   713 use warnings;
  93         233  
  93         4735  
9              
10             our $VERSION = '1.14.2.2'; # TRIAL VERSION
11              
12             require Exporter;
13 93     93   658 use base qw(Exporter);
  93         202  
  93         8186  
14 93     93   653 use vars qw(@EXPORT);
  93         208  
  93         33784  
15              
16             @EXPORT = qw(hash_flatten);
17              
18             sub hash_flatten {
19 90     90 0 13949 my ( $in, $out, $sep, @super_keys ) = @_;
20              
21 90 100       321 if ( ref($in) eq "HASH" ) {
    50          
22 87         155 for my $key ( keys %{$in} ) {
  87         1293  
23 397         676 push @super_keys, $key;
24 397 100       773 if ( ref( $in->{$key} ) ) {
25 38         207 hash_flatten( $in->{$key}, $out, $sep, @super_keys );
26             }
27             else {
28 359         707 my $new_key_name = join( $sep, @super_keys );
29 359         935 $new_key_name =~ s/[^A-Za-z0-9_]/_/g;
30 359         1868 $out->{$new_key_name} = $in->{$key};
31             }
32 397         884 pop @super_keys;
33             }
34             }
35             elsif ( ref($in) eq "ARRAY" ) {
36 3         4 my $counter = 0;
37 3         4 for my $val ( @{$in} ) {
  3         6  
38 10 100       14 if ( ref($val) ) {
39 2         4 push @super_keys, $counter;
40 2         5 hash_flatten( $val, $out, $sep, @super_keys );
41 2         25 pop @super_keys;
42             }
43             else {
44 8         22 my $new_key_name = join( $sep, @super_keys ) . "_$counter";
45 8         14 $new_key_name =~ s/[^A-Za-z0-9_]/_/g;
46 8         16 $out->{$new_key_name} = $val;
47             }
48 10         17 $counter++;
49             }
50             }
51             }
52              
53             1;