Mark: Perl Hashes sortieren

Beitrag lesen

Hallo,

nochmal abschließend zur Programmierung. Der Code hat bei mir fast auf anhieb geklappt.
Das say Feature ist bei mir nicht aktiviert gewesen, also print eignefügt und die Abbruchbedingung für die Schleife war nicht ganz sauber, da die innere Schleife nicht verlassen wird, wenn $top=2 ist und er somit $top hochzählt. Dann ist auch die Abbruchbedingung in der Hauptschleife nicht mehr erfüllt.

So also richtig:

	    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}}) {  
		    print sprintf ('%20s:%-15s <-> %20s:%-15s %15d', @{$src_dst}, $traffic)."\n";  
		    print $top."\n";  
		    $top++;  
		    last if 2 == $top;  
		}  
	    }

Vielen Dank nochmals.