my %uniq; for (@$AoH) { $uniq{$_->{page}}{$_->{chap}} = 1; } @$AoH = map { my $k = $_; map { {page => $k , chap=>$_} } keys %{$uniq{$k}}; } keys %uniq;