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

UtilFaqSubForm edit

Titel Wie erstelle ich ein Hash of Hashes aus einem Array?
Autor TinaMueller
Bereich FaqTypen
Tags hash, array
Topic revision: 2011-06-21, TinaMueller
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.