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   67730 use v5.12.5;
  93         332  
8 93     93   658 use warnings;
  93         194  
  93         4685  
9              
10             our $VERSION = '1.14.2.3'; # TRIAL VERSION
11              
12             require Exporter;
13 93     93   623 use base qw(Exporter);
  93         325  
  93         7787  
14 93     93   662 use vars qw(@EXPORT);
  93         186  
  93         33386  
15              
16             @EXPORT = qw(hash_flatten);
17              
18             sub hash_flatten {
19 90     90 0 14079 my ( $in, $out, $sep, @super_keys ) = @_;
20              
21 90 100       308 if ( ref($in) eq "HASH" ) {
    50          
22 87         152 for my $key ( keys %{$in} ) {
  87         1220  
23 397         735 push @super_keys, $key;
24 397 100       828 if ( ref( $in->{$key} ) ) {
25 38         240 hash_flatten( $in->{$key}, $out, $sep, @super_keys );
26             }
27             else {
28 359         721 my $new_key_name = join( $sep, @super_keys );
29 359         953 $new_key_name =~ s/[^A-Za-z0-9_]/_/g;
30 359         1875 $out->{$new_key_name} = $in->{$key};
31             }
32 397         925 pop @super_keys;
33             }
34             }
35             elsif ( ref($in) eq "ARRAY" ) {
36 3         5 my $counter = 0;
37 3         3 for my $val ( @{$in} ) {
  3         6  
38 10 100       14 if ( ref($val) ) {
39 2         4 push @super_keys, $counter;
40 2         6 hash_flatten( $val, $out, $sep, @super_keys );
41 2         12 pop @super_keys;
42             }
43             else {
44 8         20 my $new_key_name = join( $sep, @super_keys ) . "_$counter";
45 8         14 $new_key_name =~ s/[^A-Za-z0-9_]/_/g;
46 8         18 $out->{$new_key_name} = $val;
47             }
48 10         16 $counter++;
49             }
50             }
51             }
52              
53             1;