[quote=Thorium,08.07.2006, 15:27]Du scheinst da ein ziemliches Durcheinander zu haben...
Willst du Daten in diesem Format speichern?
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:
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:
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:
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:
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.
QuoteDu scheinst da ein ziemliches Durcheinander zu haben...
Willst du Daten in diesem Format speichern?
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
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 :-)
QuoteAber zu deiner Frage:
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:
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.
standort_1 --- 1
standort_2 --- 2
standort_3 --- 3
Um die letzte foreach Schleife kam ich nicht umher ?
Quotemy $standort1 = $standort{standort_1}
Habe dies mal versucht auf das Beispiel umzusetzten,
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 ???