Mark: Perl Hashes sortieren

Beitrag lesen

my %traffic_map;

foreach my $key_src_ip (keys %{$ip{"source"}}) {
    foreach my $key_src_port (keys %{$ip{"source"}{$key_src_ip}}) {
        foreach my $key_dest_ip (keys %{$ip{"source"}{$key_src_ip}{$key_src_port}}) {
            foreach my $key_dest_port (keys %{$ip{"source"}{$key_src_ip}{$key_src_port}{$key_dest_ip}}) {
                push @{$traffic_map{$ip{"source"}{$key_src_ip}{$key_src_port}{$key_dest_ip}{$key_dest_port}}},
                    [$key_src_ip,$key_src_port,$key_dest_ip,$key_dest_port];
            }
        }
    }
}

my $top = 0;
for my $traffic (sort {$b <=> $a} keys %traffic_map) {
    last if 2 == $top;
    for my $src_dst (@{$traffic_map{$traffic}}) {
        say sprintf '%20s:%-15s <-> %20s:%-15s %15d', @{$src_dst}, $traffic;
        $top++;
    }
}


> Die zusätzliche Arrayreferenz ist dafür da, falls mehrere src\_dst dieselbe Trafficzahl aufweisen.  
  
Hallo,  
  
vielen vielen Dank. Kann es zwar erst Morgen testen, beim darüberschauen sah es aber recht gut aus und ich habe es auch verstanden. Ich hatte die ganze Zeit nur auf dem Schlauch gestanden, da ich dachte es gibt eine elegantere Methode in Perl zum sortieren von anonymen Hashes (z.B. eine Funktion, der man nur die Spalte gibt, nach der man sortieren möchte). So ist es ja schon recht umständlich, dafür aber leicht nachzuvollziehen :-)  
  
Gruß  
  
Mark