my @S=("tilly","zaxo","sauog","enlil","castaway","wufnik"); my @U = ("castaway","zaxo","wufnik","enlil"); my %uS = map { $tmp = $_; $tmp => grep { $S[$_] =~ /^$tmp$/ } (0..$#S) } @U; @uS = sort { $uS{$a} <=> $uS{$b} } @U; print join "\n", @uS;