use strict; use warnings; use Data::Dumper; my $raUserOrder = [ 5, 1, 4, 3, 2 ]; my %sortOrder = do { my $count = 0; map { $_ => ++ $count } @$raUserOrder; }; my $raQueryResults = [ { key => 4, name => q{label4} }, { key => 2, name => q{label2} }, { key => 5, name => q{label5} }, { key => 1, name => q{label1} }, { key => 3, name => q{label3} }, ]; my $raSortedQueries = [ map { $_->[0] } sort { $sortOrder{$a->[1]} <=> $sortOrder{$b->[1]} } map { [ $_, $_->{key} ] } @$raQueryResults ]; print Data::Dumper->Dumpxs( [ \%sortOrder, $raSortedQueries ], [ qw{ *sortOrder raSortedQueries } ] );