my %departments; push @{ $departments{ $_->{department} }{classes} }, $_ foreach (@classes); my @departments = map { $_->{department} = $_->{classes}[0]{department}; $_ } values %departments;