Mark: Perl Hashes sortieren

Beitrag lesen

Hallo,

ich nutze strict und warnings und habe keine Probleme.

Du hast sowas:

$, = $\ = "\n";
my %ip = ();
$ip{foo}{bar} = 2;               # Versuch Zuweisung Literal
$ip{foo}{bar}{baz} = {bar => 1}; # Key baz hat eine Referenz als Wert

Warung:

Can't use string ("2") as a HASH ref while "strict refs" in use at ...


> >   
> > Die Warnung kommt mit use strict; use warnings;  
> > Es sei denn Du schaltest  
> >   
> > `no strict "refs";`{:.language-perl}  
> >   
> > Was ich nicht für empfehlenswert halte.  
> >   
> > Hotti  
> >   
> >   
>   
> Hallo,  
>   
> Wie schon geschrieben, habe ich keine warnings explizit ausgeschaltet und benutze use strict; use warnings;  
> M.E. mache ich auch nicht den Fehler den du beischreibst, da "outgoing\_traffic" und "incoming\_traffic" lediglich feste Keys sind, denen ich einen Value zuordne. Soweit ich Hashtables verstehe kann man einem Schlüssel auch immer einen Wert zuordnen. Sprich ich könnte, "Source", $src\_ip", "src\_port"... jeweils einen festen Wert geben. Oder habe ich prinzipiell einen Denkfehler? Vor allem kann ich ja auch auf den Wert des "outgoing\_traffic" zugreifen ohne Fehler.  
>   
> Gruß  
  
Hallo,  
  
jetzt weiß ich was du meinst :-) Habe es gemerkt, da mein Programm sich in einem bestimmten Fall komisch verhalten hat, der im Regelfall so gut wie nicht auftritt. Habe meine Struktur überarbeitet, wie folgt:  
  
~~~perl
		  $ip{"source"}{$src_ip}{$src_port}{$dest_ip}{$dest_port}{$bytes_total}{"outgoing_traffic"}+=$bytes_forwards;  
		  $ip{"source"}{$src_ip}{$src_port}{$dest_ip}{$dest_port}{$bytes_total}{"incoming_traffic"}+=$bytes_backwards;

Musste zwar auch etwas meine Schleifen anpassen, jetzt passt es aber.

Trotzdem komisch, dass sich Perl nicht beschwert hat.

Gruß