c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my @food = ( { name => 'apple', number => 1 }, { name => 'banana', number => 2 }, { name => 'orange', number => 5 }, { name => 'broccoli', number => 9 }, { name => 'grape', number => 10 }, { name => 'kale', number => 8 }, { name => 'lemon', number => 5 }, ); ;; my %ranking = ( 1 => 0, 2 => 1, 5 => 2, 10 => 3, ); ;; my @ordered_then_unordered = sort { $ranking{$a->{number}} <=> $ranking{$b->{number}} } grep { exists $ranking{$_->{number}} } @food ; push @ordered_then_unordered, grep { ! exists $ranking{$_->{number}} } @food ; ;; dd \@ordered_then_unordered; " [ { name => "apple", number => 1 }, { name => "banana", number => 2 }, { name => "orange", number => 5 }, { name => "lemon", number => 5 }, { name => "grape", number => 10 }, { name => "broccoli", number => 9 }, { name => "kale", number => 8 }, ]