Here's something completely different - it doesn't use a sort !
#!/usr/bin/perl
use strict; # https://perlmonks.org/?node_id=11106277
use warnings;
my @array = ( "APPLE", "ORANGE", "PEACH", # Use this for the O
+RDER
"GRAPE", "BANANA", "PINEAPPLE" );
my @subset = ( "PINEAPPLE", "GRAPE", "APPLE" ); # A required subset
+but NOT
# in the required order
my %order;
@order{ @array } = 0 .. $#array;
my @results;
@results[ @order{ @subset } ] = @subset;
@results = grep defined, @results;
print "results: @results\n";
Just kidding, this is called a distribution sort.