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!