Freddy: Schüssel von Hashes in einem Array Ansprechen

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.

  1. Hallo,

    ein Array of Hashes also. Ärgere mich gerade mit ähnlichem rum: Gugg doch einfach mal hier: AoH

    Gruß,
    Leeloo

    --
    "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
  2. Hallo,

    probiers mal statt

    $Ausgabe = $Liste[0]{'Vorname'};

    so
      $Ausgabe = $Liste[0]{Vorname};

    Gruß,
    Leeloo

    --
    "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
  3. 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 = (

    es hat sich eingebürgert, dass Variabeln mit einem Kleinbuchstaben anfangen

    { 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.

    --
    Javascript ist toll (Perl auch!)
  4. 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

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)