From df6a32df87becf896cccaae4b24cb88461391ffe Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sun, 7 Mar 2010 19:08:45 +0000 Subject: [PATCH] implement rest of Name/Value unroll, fix Inform git-svn-id: https://perl-cwmp.googlecode.com/svn/trunk@261 836a5e1a-633d-0410-964b-294494ad4392 --- lib/CWMP/Parser.pm | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/lib/CWMP/Parser.pm b/lib/CWMP/Parser.pm index 72b96f9..be09a5e 100644 --- a/lib/CWMP/Parser.pm +++ b/lib/CWMP/Parser.pm @@ -86,29 +86,28 @@ sub _walk { push @{ $state->{$name} }, _hash_value $tree->{$node}; } elsif ( ref $tree->{$node} eq 'ARRAY' ) { - my $hash = _hash_value $tree->{$node}->[$_]; - - if ( my $n = delete $hash->{Name} ) { - my @keys = keys %$hash; - if ( $#keys > 0 ) { - $state->{$name}->{$n} = $hash; + foreach my $e ( @{ $tree->{$node} } ) { + my $hash = _hash_value $e; + + if ( my $n = delete $hash->{Name} ) { + my @keys = keys %$hash; + if ( $#keys > 0 ) { + $state->{$name}->{$n} = $hash; + } else { + $state->{$name}->{$n} = $hash->{ $keys[0] }; +# warn "using $keys[0] as value for $name.$n\n"; + } } else { - $state->{$name}->{$n} = $hash->{ $keys[0] }; - warn "using $keys[0] as value for $name.$n\n"; + push @{ $state->{$name} }, $hash; } - } else { - push @{ $state->{$name} }, _hash_value $tree->{$node}->[$_] - foreach 0 .. $#{ $tree->{$node} }; } } $dump = 1; - } elsif ( $node =~ m/Inform/ ) { - - $state->{_dispatch} = 'InformResponse'; - } elsif ( ref($tree->{$node}) eq 'HASH' ) { + $state->{_dispatch} = 'InformResponse' if $node =~ m/Inform/; + warn "## recurse $node\n"; _walk( $tree->{$node} ); -- 2.20.1