Hallo Ihrs!
Abgesehen von der perllocale-Lösung (Cheatah):
Im sort() kannst Du eine *eigene* Vergleicher-Funktion verwenden.
Diese könnte die beiden Strings nehmen, *lokal* die Ersetzen von ä nach ae vornehmen, *dann* vergleichen und das Ergebnis zurückliefern.
Dann wäre nichts rückgängig zu machen.
Richtig so!!
Dummerweise darf man aber nicht $a und $b bearbeiten:
print sort {
my ($a2, $b2)=($a,$b);
$a2=~s/ä/ae/i;
$a2=~s/ö/oe/i;
$a2=~s/ü/ue/i;
$a2=~s/ß/sz/;
$b2=~s/ä/ae/i;
$b2=~s/ö/oe/i;
$b2=~s/ü/ue/i;
$b2=~s/ß/sz/;
$a2 cmp $b2;
} @list;
Die Idee mit dem 'Merken' des Ursprungstrings mit Hilfe von # fand ich auch ganz pfiffig. Aber die ganzen Lösungen mit A1 und dem Umweg über die B75 ... eher amüsant. Aber auch nur deswegen, weil doch das Ziel so klar war: Telefonbuchsortierung. Das heißt dann doch Umlaute ersetzen. Nur halt mit der Nebenbedingung, nicht die eigentlichen Strings zu verändern.
Das ganze hat sich irgenwie als nette Knobelei herausgestellt :)
Jörk