Perl -将一种数据结构转换为另一种



我正在尝试使用Perl将一种数据结构转换为另一种。

my $agent_details = $dbh->selectall_arrayref(
"SELECT agent_id, year, type FROM agents ORDER BY agent_id",
{ Slice => {} }
);
我最终得到的数据结构是:
$VAR1 = [
{
'agent_id' => '1',
'year' => '2000',
'type' => '14',
},
{
'agent_id' => '2',
'year' => '2001',
'type' => '14',
},
{
'agent_id' => '3',
'year' => '2002',
'type' => '14',
},
{
'agent_id' => '4',
'year' => '2000',
'type' => '14',
},
{
'agent_id' => '5',
'year' => '2001',
'type' => '14',
},
{
'agent_id' => '6',
'year' => '2002',
'type' => '14',
},
]

我要做的是转换成数组的哈希:

$VAR2 = {
'2000' => [1, 4],
'2001' => [2, 5],
'2002' => [3, 6],
}

我能够通过一些丑陋的循环来完成这个任务,但是我觉得有一种更简单/更好/更干净的方法。

my %agents_by_year;
for $agent ( @$agents ) {
push @{ $agents_by_year{ $agent->{ year } } }, $agent->{ agent_id };
}