use strict; use warnings; use Data::Dumper; my @servers = ( { Host => 'server02', GroupName => 'serversA' }, { Host => 'server04', GroupName => 'serversA' }, { Host => 'server02', GroupName => 'serversB' }, { Host => 'server04', GroupName => 'serversB' }, { Host => 'server02', GroupName => 'serversC' }, { Host => 'server04', GroupName => 'serversC' }, { Host => 'server02', GroupName => 'serversD' }, ); my %consolidated; foreach (@servers) { push @{$consolidated{$_->{Host}}}, $_->{GroupName}; } print Dumper(\%consolidated);