Thread Hashes of Arrays (8 answers)
Opened by flango at 2006-07-08 17:19

flango
 2006-07-08 19:19
#8272 #8272
User since
2006-07-08
5 Artikel
BenutzerIn
[default_avatar]
[quote=Thorium,08.07.2006, 15:27]Du scheinst da ein ziemliches Durcheinander zu haben...
Willst du Daten in diesem Format speichern?
Code: (dl )
1
2
3
standort_1 => 'something',
standort_2 => 'something else',
standort_3 => 'anything'


Nein, ich wollte den Beitrag so einfach wie möglich belassen.
Zu den Standorten werden noch weitere keys/values hizukommen.


Wenn das der Fall ist, brauchst du kein Hash im Array; dann reicht ein einfaches Hash:
Code: (dl )
1
2
3
4
5
my %standorte = (
standort_1 => 'something',
standort_2 => 'something else',
standort_3 => 'anything'
);


Ein array von hashes macht nur Sinn, wenn du Mehrere Informationen in einer Geordneten Liste haben willst:

Code: (dl )
1
2
3
4
my @standorte;
push @standorte, { name => 'Irgendwo', stadt => 'berlin', strasse => 'lang\'strasse' };
push @standorte, { name => 'Irgendwo2', stadt => 'frankfurt', strasse => 'lang\'strasse' };
push @standorte, { name => 'Foobar', stadt => 'kassel', strasse => 'lang\'strasse' };


Genau da soll es irgendwann hin :-)

Aber zu deiner Frage:
Code: (dl )
local $hash_values = values %$hash;

(values %$hash) gibt eine Liste zurück. Eine Liste gibt im Skalaren Kontext die Anzahl elemente zurück - und das ist in deinem Fall immer eins.
Wenn du aber auf das Element "standort_1" in einem reinen Hash zugreiffen willst:

Code: (dl )
my $standort1 = $standort{standort_1}

Wie du siehst, ist das Zugreiffen auf Daten wesentlich einfacher, wenn du die Daten dementsprechend speicherst.[/quote]

aah, das stichwort Scalarer kontext hat bei mir den groschen fallen lassen.

Quote
Du scheinst da ein ziemliches Durcheinander zu haben...
Willst du Daten in diesem Format speichern?
Code: (dl )
1
2
3
standort_1 => 'something',
standort_2 => 'something else',
standort_3 => 'anything'

Nein, ich wollte den Beitrag so einfach wie möglich lassen.
Zu den Standorten werden noch weitere keys/values hizukommen
Quote
Code: (dl )
1
2
3
4
my @standorte;
push @standorte, { name => 'Irgendwo', stadt => 'berlin', strasse => 'lang\'strasse' };
push @standorte, { name => 'Irgendwo2', stadt => 'frankfurt', strasse => 'lang\'strasse' };
push @standorte, { name => 'Foobar', stadt => 'kassel', strasse => 'lang\'strasse' };

Genau da soll es irgendwann hin :-)


Quote
Aber zu deiner Frage:
Code: (dl )
local $hash_values = values %$hash;

(values %$hash) gibt eine Liste zurück. Eine Liste gibt im Skalaren Kontext die Anzahl elemente zurück - und das ist in deinem Fall immer eins.
Wenn du aber auf das Element "standort_1" in einem reinen Hash zugreiffen willst:



Habe es nun mit einer weitere Schleife gelöst:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
 
foreach my $hash (@standorte) {
foreach my $key (keys %$hash) {
if ( $key =~ /stand/i ) {
print "<br>";
print keys %$hash;
print " --- ";
print values %$hash;

}
}
}


Hat nun das erwünschte Ergebniss.

Code: (dl )
1
2
3
standort_1 --- 1
standort_2 --- 2
standort_3 --- 3



Um die letzte foreach Schleife kam ich nicht umher ?

Quote
my $standort1 = $standort{standort_1}


Habe dies mal versucht auf das Beispiel umzusetzten,
Code: (dl )
my $hash_value =   $hash{standort_1};


Ergab bei mir eine Fehlermeldung in der Zeile mit der Zuweisung.

Global symbol "%hash" requires explicit package name at /test.cgi ???

View full thread Hashes of Arrays