my %liste1 = ("murks" => "a", "grumpf" => "g", "schluck" => "n", "hust" => "l", "würg" => "b", "schnüffel" => "C", "mecker" => "3", "argl" => "17", ); sub vergl { my $aa = $liste1{$a}; my $bb = $liste1{$b}; my $a_is_number = $aa !~ /\D/; my $b_is_number = $bb !~ /\D/; #print "a='$a' b='$b', a_is_number='$a_is_number' b_is_number='$b_is_number'\n"; return -1 if $a_is_number and not $b_is_number; return 1 if $b_is_number and not $a_is_number; return $aa <=> $bb if $a_is_number and $b_is_number; return lc($aa) cmp lc($bb); } print join(' :: ', sort vergl keys %liste1), "\n"; # # Das Programm gibt die Schlüssel sortiert nach den Werten aus, wobei die # Werte auf folgende Weise sortiert werden: # - Zahlen vor Alphanumerischen einträgen # - Zahlen unter sich numerisch soriert (3 ist kleiner als 17) # - Alphanumerische Strings unter sich alphanumerisch sortiert #