Wie erstelle ich ein Hash of Hashes aus einem Array?
Inhalt:
Problem
Man hat eine Liste von Strings, z.b. a, b, c, d, e. Nun möchte man daraus einen beliebig tief verschachtelten Hash of Hashes of ... bauen:
$hash->{a}->{b}->{c}->{d}->{e}...
Dies wird immer mal wieder gefragt, aber nicht häufig genug, um es zu einer Funktion in einem CPAN-Modul zu machen.
Hier eine kleine Funktion "hash", die sowas macht. Sie bekommt die Arrayreferenz ubergeben und als zweites Argument die Referenz auf die Zieldatenstruktur (für den Fall, dass es in einen existierenden Hash eingefügt werden soll).
sub hash {
my ($ref, $hash) = @_;
for my $el (@$ref) {
$hash = $hash->{$el} ||= {};
}
}
my $h = {};
my @array = qw/ a b c d e /;
hash(\@array, $h);
Ergänzungen, Kommentare
Kommentare werden am besten in folgender Form vorgenommen, damit
sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---+++ Main.??? - 14 Jul 2003 - Betreff