Dynamisch / rekursiv Hashes in Perl erstellen?

8

Ich bin bei Perl ziemlich neu und versuche, einen Hash rekursiv zu erstellen und nichts zu erreichen. Ich habe versucht, nach Tutorials zu suchen, um Hashes dynamisch zu erstellen, aber alles, was ich finden konnte, waren einführende Artikel über Hashes. Ich wäre dankbar, wenn Sie mich in die richtige Richtung weisen oder einen schönen Artikel / Tutorial vorschlagen.

Ich versuche, von einer Datei zu lesen, die Pfade in Form von

hat %Vor%

und ich möchte einen Hash wie

erstellen %Vor%

Das Skript, das ich momentan verwende, ist:

%Vor%     
Gaurav Dadhania 30.12.2010, 00:04
quelle

5 Antworten

6

Das ist ein bisschen weit hergeholt, aber es funktioniert:

%Vor%

Es beruht auf Autovivification, die zugegebenermaßen für Anfänger etwas fortgeschritten ist.

Was wahrscheinlich eine Antwort auf Ihre Frage sein könnte, ist, dass Sie nach leeren Strings in den Blättern fragen, die einen anderen "Typ" als die Hashes der Knoten haben und eine andere Dereferenzierung erfordern. p>     

JB. 30.12.2010, 00:34
quelle
7

Data::Diver deckt diese Nische so gut ab, dass die Leute das Rad nicht neu erfinden sollten.

%Vor%     
ysth 30.12.2010 02:44
quelle
3

Ich habe Ihren Code ausgeführt und ein paar Probleme gefunden:

  • Sie haben% cocode% nicht korrekt angegeben.
  • Mit dieser Rekursion erstellen Sie einen Hash, der sich selbst referenziert, was nicht ist, was Sie wollen.
  • In Ihrem äußersten Aufruf ist das zweite Argument in @elements eine Zeichenkette, aber beim rekursiven Aufruf innerhalb übergeben Sie ein Array von constructHash()

Versuchen Sie es.

%Vor%

Erzeugt

%Vor%

Denken Sie daran, Perl-Hashes sind nicht geordnet.

    
Nathan 30.12.2010 00:42
quelle
3

Ich habe noch nie so etwas gemacht, also ist dieser Ansatz wahrscheinlich falsch, aber gut, hier ist meine Aufnahme:

%Vor%

BEARBEITEN: Behoben!

EDIT2: Eine (ich denke) tail-call optimierte Version, weil!

%Vor%     
Hugmeir 30.12.2010 00:25
quelle