Nice idea--I propose the following modification, to dump extra words at the end (and to use string comparison, of course):
my $sortstr = join('', @list);
my @sorted_list = sort {
rindex($sortstr,substr($b,0,1)) <=> rindex($sortstr,substr($a,0,1))
||
$a cmp $b
} @list2;
Of course, you might want words that start with letters not in the list to be at the front, in which case, alphie's solution is preferable (aside from using <=> instead of cmp).
Update: doh! It doesn't do what I thought it did! Fix coming... Fix here:
my $sortstr = join('', @list);
my @sorted_list = sort {
my ($tmp1,$tmp2);
(($tmp1 = index($sortstr,substr($a,0,1))) >= 0 ? $tmp1 : length($sort
+str))
<=>
(($tmp2 = index($sortstr,substr($b,0,1))) >= 0 ? $tmp2 : length($sort
+str))
||
$a cmp $b
} @list2;
If God had meant us to fly, he would *never* have give us the railroads.
--Michael Flanders |