my %queries_by_key = (); # Hash of arrays my $number_of_queries = scalar @all_queries; for (my $i = 0 ; $i < $number_of_queries; ++$i) { my %query = %{ pop @all_queries }; # value of pop() is a hash foreach my $query_key (keys %query) { # Treat each value in %queries_by_key as an anonymous array push @{ $queries_by_key{$query_key} }, $query{$query_key}; } } foreach my $key (sort keys %queries_by_key) { print "$key has "; print join ',', @{ $queries_by_key{$key} }; # treat as an array print "\n"; }