Sturzi: Daten in Hash einfügen

Hallo zusammen,
Ich möchte gerne neue Daten an einen Hash ranhängen. Bei der Definition geht es:

%alter = ("Sabine","27","Klaus","35","Ralf","22");

Aber nun möchte ich während der Laufzeit, nochmals Daten an den Hash einfügen, wie geht das? Jedesmal wenn ich folgendes mache:

%alter = ($name,$nummer);

sind die alte Angaben gelöscht und nur noch der neuste Eintrag im Hash, warum?

Danke für die Hilfe.

Grüsse, Sturzi

  1. hi!

    Ich möchte gerne neue Daten an einen Hash ranhängen. Bei der
    Definition geht es:
    %alter = ("Sabine","27","Klaus","35","Ralf","22");

    In dieser Zeile weißt du einem Hash eine Liste zu. Da sich das nicht
    verträgt, konvertiert Perl die Liste automatisch in einen Hash. Dazu
    verwendet es alle ungeraden Elemente (das erste, das dritte, ...) als
    Schlüssel und alle geraden und direkt folgenden Elemente als Wert.

    Aber nun möchte ich während der Laufzeit, nochmals Daten an den
    Hash einfügen, wie geht das? Jedesmal wenn ich folgendes mache:
    %alter = ($name,$nummer);
    sind die alte Angaben gelöscht und nur noch der neuste Eintrag im
    Hash, warum?

    Wenn du das machst, weißt du ja deinem Hash einen völlig neuen Wert
    zu. Und zwar wieder eine Liste, die wie vorher konvertiert wird.
    Allerdings werden die alten Daten überschrieben, weil dein Hash ja
    einen neuen Wert erhält.

    Richtig wäre es zb. so:

    === cut ===
    %alter = ("Sabine" => 27, "Klaus" => 35, "Ralf" => 22);
    print $alter{"Sabine"};
    $alter{"Franz"} = 42;
    $alter{"Klaus"} = 51;
    === cut ===

    Erstmal solltest du Zahlen nicht in Anführungszeichen setzen, denn
    es sind ja Zahlen, und eigentlich keine Strings. Und die => sind
    nur Synonyme für Kommas, stellen aber für den Programmierer den
    Zusammenhang zwischen zwei getrennten Ausdrücken klarer dar. Aber
    wenn du magst, kannst du dafür auch weiterhin Kommas schreiben.

    Mit $alter{"Sabine"} greifst du auf den Wert im Hash zu, der unter
    dem Schlüssel "Sabine" abgelegt ist. Wenn du jetzt diesen Wert ganz
    einfach ersetzen willst, weist du dem Hash unter diesem Schlüssel
    einen neuen Wert zu, so wie ich es oben mit dem Schlüssel "Klaus"
    in der letzten Zeile gemacht habe.

    Wenn du einen neuen Wert in den Hash einsetzen willst, dann machst du
    das genauso, allerdings verwendest du einen neuen Schlüssel, der noch
    nicht im Hash vorkommt. $alter{"Franz"} = 42 versucht, den Wert unter
    dem Schlüssel "Franz" zu ersetzen. Da es einen solchen Schlüssel aber
    noch nicht gibt, wird er neu angelegt.

    bye, Frank!

  2. use Mosche;

    Ich möchte gerne neue Daten an einen Hash ranhängen. Bei der Definition geht es:

    %alter = ("Sabine","27","Klaus","35","Ralf","22");

    Aber nun möchte ich während der Laufzeit, nochmals Daten an den Hash einfügen, wie geht das?

    $alter{'Harald'} = 105; # :-)

    Jedesmal wenn ich folgendes mache:
    %alter = ($name,$nummer);

    sind die alte Angaben gelöscht und nur noch der neuste Eintrag im Hash, warum?

    Weil du den gesamten Hash überschreibst.

    use Tschoe qw(Matti);