Schüssel von Hashes in einem Array Ansprechen
Freddy
- perl
Hi,
ich möchte eine Personenliste erstellen. Dabei definierte ich folgenden Hash und Array
my %Person = ();
my @Liste = ();
nun weise ich folgende Werte zu:
$Person{'Vorname'} = "Frank";
$Person{'Zuname'} = "Maier";
$Liste[0] = %Person;
$Person{'Vorname'} = "Hans";
$Person{'Zuname'} = "Geier";
$Liste[1] = %Person;
usw.
So weit meckert der Perl-Interpreter auch nicht. Aber nun möchte ich für die Ausgabe den Inhalt aus dem Array und Hash holen. Dazu habe ich
$Ausgabe = $Liste[0]{'Vorname'};
usw.
angegeben, womit der Perl-Interpreter nicht klarkommt. Wie muss ich z.B. den Schlüssel 'Vorname' in dem Hash, der sich im ersten Element [0] im Array @Liste befindet, korrekt ansprechen?
Schon mal vielen Dank für eure Unterstützung.
Gruß Freddy.
Hallo,
ein Array of Hashes also. Ärgere mich gerade mit ähnlichem rum: Gugg doch einfach mal hier: AoH
Gruß,
Leeloo
Hallo,
probiers mal statt
$Ausgabe = $Liste[0]{'Vorname'};
so
$Ausgabe = $Liste[0]{Vorname};
Gruß,
Leeloo
Erstmal vorne weg, bitte gib keine falsche email Addresse an, es besteht keine Pflicht etwas dort einzutragen.
ich möchte eine Personenliste erstellen. Dabei definierte ich folgenden Hash und Array
my %Person = ();
my @Liste = ();nun weise ich folgende Werte zu:
$Person{'Vorname'} = "Frank";
$Person{'Zuname'} = "Maier";
$Liste[0] = %Person;
Damit wet du einem Skalar eine Liste zu, das bedeutet das Perl das umwandelt in die Anzahl der Elemente. Du hast in $Liste[0] also 2 stehen. hmm, mal nachgeprüft, du hast hier 2/8 stehen, warum weiß ich grad nicht.
$Person{'Vorname'} = "Hans";
$Person{'Zuname'} = "Geier";
$Liste[1] = %Person;
Hier genau so.
angegeben, womit der Perl-Interpreter nicht klarkommt. Wie muss ich z.B. den Schlüssel 'Vorname' in dem Hash, der sich im ersten Element [0] im Array @Liste befindet, korrekt ansprechen?
ich glaub du willst was ganz anderes, du willst eine List mit Hashelementen, dass sieht so aus:
my @liste = (
{ Vorname => 'Hans', Zuname => 'Geier' },
{ Vorname => 'Frank', Zuname => 'Maier' }
)
Dann kannst du auf die einzelenen Elemente zugreifen:
$liste[$index]->{Vorname}
$liste[$index]->{Zuname}
oder wie LeeLoo probiert hat, mit push:
my @liste;
push @liste, { Vorname => 'Hans', Zuname => 'Geier' };
push @liste, { Vorname => 'Frank', Zuname => 'Maier' };
In der Perl Doku findest du noch viel mehr darüber.
Struppi.
ich möchte eine Personenliste erstellen.
Klar, aber so wird das nix.
$Liste[0] = %Person;
Du weist dem angesprochenen Arrayelement den skalaren Wert deines Hashs zu statt des Hashes selber. Für das Erweitern von Arrays gibt es push, den Link zu perldsc hast du ja schon bekommen:
push @Liste, { %Person };
Die geschweiften Klammern bewirken, dass der Hash, wie er ist, dem Array hinzugefügt wird. Du könntest auch den Listenkontext verwenden, indem du statt der geschweiften eckige Klammern verwendest. Den Unterschied siehst du, wenn du dir @Liste via Data::Dumper ausgeben lässt.
So weit meckert der Perl-Interpreter auch nicht.
Klar, ihm ist egal, was du deiner Liste zuweist, doch spätestens beim Zugriff via:
$Ausgabe = $Liste[0]{'Vorname'};
erlebst du gerade dein blaues Wunder. Notiere die Zuweisung richtig und alles wird gut :)
Siechfred