2011-04-28T17:39:05
biancaHabe sort {$a eq 'c' || $a cmp $b} probiert, das stellt c ans Ende statt an den Anfang.
Bei sort {$b eq 'c' || $a cmp $b} steht es an zweiter Stelle statt am Anfang.
Ich bin zu müde um auszuprobieren, aber Dein Sortierkriterium sollte
in jedem Fall die Bedingung cmp($a,$b) == -cmp($b,$a) erfüllen.
Deshalb must Du am Anfang Deiner Sortierfunktion $a
und $b auf 'c' prüfen,
damit in beiden Fällen die Sonderbehandlung für 'c' angesprochen wird.
sort {($a eq 'c') ? -1 : (($b eq 'c') ? 1 : $a cmp $b)} könnte gehen.
(evtl. musst Du -1 und 1 vertauschen.)
Oder Du filterst 'c' vorher raus:
foreach ('c', sort {$a cmp $b} grep {$_ ne 'c'} keys %test) {...}