@unsort = sort { int(rand(3)) - 1 } ('aaa','yyy','fff','bbb','eee','ddd','fff','jjj','iii','kkk','zzz','xxx','vvv','sss'); print "T\tA\tB\tA<>B\tT<>A\tT<>B\tTA<>TB\tRESULT\n"; @sort = sort { &sort_alpha_wrap('jjj',$a,$b); } @unsort; print join("\n", @sort)."\n"; sub sort_alpha_wrap { my ($top, $a, $b) = @_; my $cmp_shift = (($a cmp $b) * ($top cmp $a) * ($top cmp $b)) || (($top eq $b) <=> ($top eq $a)); print "$top\t$a\t$b\t".($a cmp $b)."\t".($top cmp $a)."\t".($top cmp $b)."\t".(($top eq $b) <=> ($top eq $a))."\t$cmp_shift\n"; return $cmp_shift; }