Halihallo
ach ja, das setzt voraus, dass jede mögliche unixtime wirklich nur einmal vorkommt, sonst gehen gleiche unixtimes verloren.
unless (ref($postinghash{$unixzeit}) eq 'ARRAY') {
$postinghash{$unixzeit} = [];
}
push @{$postinghash{$unixzeit}}, $_;
Aber das irgendwie nicht so ganz :)
also, wenn du zweimal die selbe Zeit (in <unix>...</unix>) hast und du einen normalen, scalaren Wert in den Hash schreibst, dann überschreibst du ja immer den letzten Wert. Deshalb musst du auf ein referenziertes Array ausweichen, um auch bei derselben Unixzeit zwei Dateien speichern zu können (eben diezwei Dateien, die genau dieselbe Unixzeit enthalten). Enthält eine Datei dieselbe Unixtime, dann wird der Dateiname einfach an das Array gepusht. Aber bevor gepusht werden kann, muss der Hash-Value eine gültige Arrayreferenz enthalten, dies kann man über ref($hash{$key}) eq 'ARRAY' testen. Falls es eben noch kein referenziertes Array ist, machen wir eben eines mit $postinghash{$unixtime} = []. Nun ist alles bereit, um neue Werte ans Ende zu pushen. Im normalfall wirst du jedoch nur immer ein anonymes Array mit einem Element haben, aber es ist eben auch möglich, dass es mehrere Elemente hat.
über @{$postinghash{$unixtime}} dereferenzierst du das anonyme Array und kannst über die Array-Befehle darauf zugreifen.
$ref_to_array = [ 'bla', 'bla2' ];
$ref_to_array = @norm_array;
@to_norm_array = @{$ref_to_array};
push @{$ref_to_array}, 'test'; # bezogen auf das erste Beispiel...
gibt's das ['bla', 'bla2', 'test']
war's das - oder is' noch was offen?
Viele Grüsse
Philipp