2016-11-03 3 views
2

Gibt es für ein Array, das n Elemente enthält (n mehr als 1), eine elegante Möglichkeit, auf das Element in einer Hash-Struktur zu verweisen, in der jedes Element der Schlüssel in der Sequenz ist?Perl-Hashes mit einem Array von Schlüsseln

Zum Beispiel:

my @foo = ('a','b','z'); 

dies oder etwas ähnliches gegeben, würde Ich mag die folgenden zugreifen:

$hash->{'a'}->{'b'}->{'z'} 

Wenn dies eine feste Anzahl von Elementen war es einfach sein würde, aber Ich werde nicht wissen, wie viele es zur Laufzeit sein wird (sicher nie mehr als 6 oder 7, aber ansonsten nicht zu entschuldigen).

Die einzigen Muster, die ich mir vorstellen kann, beinhalten Schleifen und Referenzen und sehen unbeholfen aus. Gibt es etwas, das nicht eine halbe Seite braucht oder Data :: Dumper erfordert, wenn Sie einen Tippfehler haben, nur um zu debuggen?

+0

See [ 'Data :: Diver'] (https://metacpan.org/pod/Data::Diver) und [' Hash :: Flatten'] (https://metacpan.org/pod/Hash::Flatten) –

+0

@ HåkonHægland Wenn Sie Ihren Kommentar in eine Antwort verwandeln, werde ich es akzeptieren. Sieht so aus, als hättest du Choroba geschlagen. –

+2

Danke, aber bitte akzeptieren Sie die Antwort von Choroba. Ich bin nicht in Konkurrenz :) –

Antwort

7

Deshalb Data::Diver existiert:

#!/usr/bin/perl 
use warnings; 
use strict; 

use Data::Diver qw{ Dive }; 

my $hash = { a => { b => { z => 'HERE' } } }; 

my @foo = qw(a b z); 

print Dive($hash, @foo); 
+0

Danke. Dachte, es muss etwas sein, aber konnte nicht eine Google-Suche, die keine generischen Ergebnisse zurückgeben. –

+0

'Dive ($ hash, map \ $ _, @foo)' wäre sicherer (d. H. Es würde mit numerischen Schlüsseln umgehen). – ikegami

Verwandte Themen