Ohne mich je mit einem Sort-Algorithmus in der Tiefe auseinander gesetzt zu haben, behaupte ich:
Dein merkwürdiges Verhalten beruht darauf, dass Du den Vergleich auf Ungleichheit machst:
perldoc perlop...
Binary "<=>" returns -1, 0, or 1 depending on whether the left argument is numerically less than, equal to, or greater than the right argument. If your platform supports NaNs (not-a-numbers) as numeric values, using them with "<=>" returns undef. NaN is not "<", "==", ">", "<=" or ">=" anything (even NaN), so those 5 return false. NaN != NaN returns true, as does NaN != anything else. If your platform doesn't support NaNs then NaN is just a string with numeric value 0
...
Binary "ne" returns true if the left argument is stringwise not equal to the right argument.
Binary "cmp" returns -1, 0, or 1 depending on whether the left argument is stringwise less than, equal to, or greater than the right argument.
Mit
ne fehlt schon mal der "-1" Zweig. Wenn die verglichenen Buchstaben gleich sind, ergibt
ne FALSE, also 0. Wenn sie ungleich sind, TRUE, bzw. 1. Dementsprechend verarbeitet sort das dann.
Betrachten wir das Wort 'eva';
'e' wird mit 'v' verglichen; Ungleich == 1 => e wird als größer betrachtet und "nach hinten geschoben";
'v' wird mit 'a' verglichen; Ungleich == 1 => v wird als größer betrachtet und "nach hinten geschoben";
'a' bleibt übrig und bleibt stehen; so wird aus 'eva' 'ave';
Das gleiche kannst Du beobachten, wenn Du eine Liste von Zahlen mit Ungleichheit sortierst:
@list = 1 .. 4;
print sort { $a != $b } @list;
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!