I imagine there is some module out there that does it, but writing a general purpose routine to convert an array of key-value pairs into a hash of arrays (HoA) is less than 10 lines of code:
use strict;
use warnings;
sub convertKeyValueArrayToHash {
my ($aData, $sKeyName, $sValueName) = @_;
my $hData={};
foreach (@$aData) {
my $k = $_->{$sKeyName};
my $v = $_->{$sValueName};
push @{$hData->{$k}}, $v;
}
return $hData;
}
And a working demo:
# ------------------------------
# Demo
# ------------------------------
my $var = [
{
'city' => 'New York',
'name' => 'Bill'
},
{
'city' => 'New York',
'name' => 'Ronald'
},
{
'city' => 'Boston',
'name' => 'George'
}
];
use Data::Dumper;
my $hData = convertKeyValueArrayToHash($var,'city','name');
print Dumper($hData), "\n";