#!/usr/bin/perl use warnings; use strict; use Data::Dumper; my $array_ref = [1, 2, 3, 4, 5]; my $array_of_hashes_ref = [ {key => 4, name => 'label4'}, {key => 2, name => 'label2'}, {key => 5, name => 'label5'}, {key => 1, name => 'label1'}, {key => 3, name => 'label3'} ]; # WANT: # $array_of_hashes_ref = [ # {key => 1, name => 'label1'}, # {key => 2, name => 'label2'}, # {key => 3, name => 'label3'} # {key => 4, name => 'label4'}, # {key => 5, name => 'label5'}, # ]; my $new_array_ref; for my $key (@$array_ref) { push @$new_array_ref, grep {$_->{'key'} == $key} @$array_of_hashes_ref; } warn Dumper($new_array_ref);