my $sortstr = join('', @list); my @sorted_list = sort { my ($tmp1,$tmp2); (($tmp1 = index($sortstr,substr($a,0,1))) >= 0 ? $tmp1 : length($sortstr)) <=> (($tmp2 = index($sortstr,substr($b,0,1))) >= 0 ? $tmp2 : length($sortstr)) || $a cmp $b } @list2;