Der verlinkte Artikel hilft Dir nicht viel weiter, weil er ein ganz anderes Problem beschreibt, als Du lösen willst. Dort werden nur die Einträge der ersten Hash-Ebene sortiert. Sortierkriterium ist der Value zu einem Key aus der 2. Hash-Ebene.
Du willst dagegen die Key-Kombinationen {Start}{Ziel} nach dem Value sortieren. Die Liste, die Du sortieren willst besteht also nicht nur aus der ersten Hash-Ebene sondern aus allen Kombinationen. Und - das hast Du nicht explizit gesagt, ist aber meine Vermutung - Du willst ohne Berücksichtigung der Gruppierung in dne Hashes "flach" sortieren, also
"Musterstadt" => "Kleines Kaff" = 1226
"Jwd" => "Haupstadt" = 3745
"Musterstadt" => "Hauptstadt" = 4345
"Jwd" => "Kleines Kaff" = 5678
anstatt zunächst den ersten Key und dann den zweiten wie in
"Musterstadt" => "Kleines Kaff" = 1226
"Musterstadt" => "Hauptstadt" = 4345
"Jwd" => "Haupstadt" = 3745
"Jwd" => "Kleines Kaff" = 5678
Also würde ich erstmal die flache Liste zusammenstellen und sie dann sortieren (ungetestet):
my @list;
foreach my $start (keys %entfernung) {
foreach my $ziel (keys %{$entfernung{$start}}) {
push @list, [$start,$ziel];
}
}
my @sorted_list = sort {$entfernung{$a->[0]}{$a->[1]} <=> $entfernung{$b->[0]}{$b->[1]}} @list;
printf "Von %s nach %s: %d\n", @$_, $entfernung{$_->[0]}{$_->[1]} foreach @sorted_list;
Das ist sicher noch nicht optimal, aber die grundlegende Idee sollte klar sein.