my $offers = []; my ($tkey, $tvalue, $key, $value); foreach my $doc_node ( @{ $results->{result}->{doc} } ) { my $offer = {}; while ( ( $tkey, $tvalue ) = each %$doc_node ) { while ( ( $key, $value ) = each %$tvalue ) { $offer->{ $key } = ( ref $value eq 'HASH' ? $value->{content} : $value ); } } push @$offers, $offer; }