Thread Hash von Hashes einstiegsprobleme (19 answers)
Opened by v0id at 2007-03-12 18:01

pktm
 2007-03-12 19:34
#74955 #74955
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
DU belegst zum einen immer den ganzen Hash auf einmal:
my %hash = (); inistialisiert dir einen leeren Hash.
Das solltest du vor dem Einfügen der Werte machen.

Dann erstellst du den Hash nur innherhalb von Codeblöcken{}, was dazu führt, dass der Hash außerhalb dieser Blöcke nicht mehr existiert. Daher auch die Notwendigkeit ihn vorher zu deklarieren.

Mit jeder Zeile aus deiner Datei möchtest du einen Datensatz anlegen.
Das geht so:
$hash{'Schluessel'} = { 'meine' => 'Datenstruktur' };
Wichtig ist, dass du das $-Zeichen nimmst, und nicht das %-Zeichen, wenn du ein Element des Hashes ansprechen möchtest.

Nun noch was zur Ausgabe:
Du baust einen Hash aus Hashes. Wenn du einen Hash mit print ausgibst erhältst du für dich wohl unbrauchbare kryptischen Kram.
Nimm dazu das Modul Data::Dumper: print Dumper( \%hash );

Einen Hash durchläuft man entweder mit each in einer while-Schleife:
Code: (dl )
1
2
3
while( my ($schl, $wert) = each %hash ) {
   print "$schl => $wert\n";
}


oder mit den Schlüsseln in einer anderen Schleife:
Code: (dl )
1
2
3
foreach my $schl ( keys(%hash) ) {
   print "$schl => $hash{$schl}\n";
}


Und immer schön use strict; und use warnings; benutzen (weniger den -w-Switch, aber das wurde schon öfter mal woanders behandelt).

Wenn du Hashes aus Hashes hast wirst du auch nicht umhin kommen dich mit Referenzen zu beschäftigen.
Das wirst du brauchen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Hash aus Hashes:
my %h = (
   'erster' => { 'schl1' => 'wert', 'schl2' => 'wert', 'schl3' => 'wert', },
   'zweiter' => { 'schl1' => 'wert', 'schl2' => 'wert', 'schl3' => 'wert', },
);
# Zugriff auf die Hashes im Hash:
print Dumper $hash{erster};
print Dumper $hash{erster}->{schl1}

# Eine Hashreferenz:
my $href = {
  'abc' => 'def',
}; # man beachte den Unterschied, dass geschweifte Klammern benutzt werden anstatt runde

print $href->{abc};


Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )

View full thread Hash von Hashes einstiegsprobleme