cgicorner.ch

Informationen rund um Perl/CGI

Sie sind hier: Home > Knowledge Base > Arbeiten mit mehrdimensionalen Hashes

Arbeiten mit mehrdimensionalen Hashes

Wie kann ein mehrdimensionaler Hash mit Daten abgefüllt und wieder teilweise oder komplett ausgelesen werden?

Anstelle von langen Erklärungen, habe ich ein kleines Beispiel programmiert, welches anhand eines Vorratslagers zeigt, wie man den Lagerbestant eines einzelnen Artikels (Beispiel 1), einer Produktgruppe (Beispiel 2) bzw. des kompletten Lagerbestandes (Beispiel 3) auslesen kann. Ebenfalls ist sichtbar, wie der Hash abgefüllt wird.

use strict;

# Definition der Variablen
my (%vorratsLager, $tmp);


# Mehrdimensionaler Hash mit Test-Daten abfüllen
$vorratsLager{"Fruechte"}{"Aepfel"} = "65 kg";
$vorratsLager{"Fruechte"}{"Birnen"} = "15 kg";
$vorratsLager{"Fruechte"}{"Bananen"} = "40 kg";
$vorratsLager{"Fruechte"}{"Kiwi"} = "20 kg";
$vorratsLager{"Beilagen"}{"Reis"} = "26 kg";
$vorratsLager{"Beilagen"}{"Teigwaren"} = "18 kg";
$vorratsLager{"Beilagen"}{"Pommes-Frites"} = "10 kg";
$vorratsLager{"Beilagen"}{"Risotto"} = "12 kg";
$vorratsLager{"Fleisch"}{"Schweinsschnitzel"} = "21 kg";
$vorratsLager{"Fleisch"}{"Kalbsvoressen"} = "14 kg";
$vorratsLager{"Fleisch"}{"Rindssteak"} = "11 kg";
$vorratsLager{"Dessert"}{"Schokolade"} = "45 kg";
$vorratsLager{"Dessert"}{"Torten"} = "32 kg";
$vorratsLager{"Dessert"}{"Glace"} = "19 kg";


# Beispiel 1: Ausgabe eines Wertes
print "Es sind noch ".$vorratsLager{"Dessert"}{"Glace"}." Glace an Lager\n\n\n";


# Beispiel 2: Alle Beilagen ausgeben
print "Beilagen an Lager:\n";
$tmp=$vorratsLager{"Beilagen"};
foreach (sort keys(%$tmp)) {
  print " > ".$_.": ".$$tmp{$_}."\n";
}


# Beispiel 3: Ausgabe des kompletten Hashes, sortiert nach Rubrik
print "\n\nLagerbestand\n------------";
foreach (sort keys(%vorratsLager)) {
  print "\n".$_.":\n";
  $tmp=$vorratsLager{$_};
  foreach (sort keys(%$tmp)) {
    print "  > ".$_.": ".$$tmp{$_}."\n";
  }
}

Das Script liefert die folgende Ausgabe:

Es sind noch 19 kg Glace an Lager


Beilagen an Lager:
  > Pommes-Frites: 10 kg
  > Reis: 26 kg
  > Risotto: 12 kg
  > Teigwaren: 18 kg


Lagerbestand
------------
Beilagen:
  > Pommes-Frites: 10 kg
  > Reis: 26 kg
  > Risotto: 12 kg
  > Teigwaren: 18 kg

Dessert:
  > Glace: 19 kg
  > Schokolade: 45 kg
  > Torten: 32 kg

Fleisch:
  > Kalbsvoressen: 14 kg
  > Rindssteak: 11 kg
  > Schweinsschnitzel: 21 kg

Fruechte:
  > Aepfel: 65 kg
  > Bananen: 40 kg
  > Birnen: 15 kg
  > Kiwi: 20 kg

Autor: Jürg Sommer, knowledge@cgicorner.ch

[ zurück ]