my %hash_by_name; for (@records) { $hash_by_name{$_->{name}} = $_; } my @sorted_names = sort keys %hash_by_name; while (@sorted_names) { push @sorted, $hash_by_name{shift @sorted_names}; }