thales: Hash einem Array zuweisen

Hallo Perl-Experten ...

Ich habe ein Problem mit einem eigentlich ganz einfachem CGI/Perl - Script: Ich habe mein Problem in dem unteren Script versucht deutlich zu machen. Wichtig ist dabei die dritte Zeile in der ich dem dritten Feld des Arrays @alles den Hash %ich zuweise.
In der vorletzten Zeile versuche ich die {'stadt'}, die im Hash %ich gespeichert ist aus dem dritten Feld des Arrays @alles aufzurufen ... aber es geht nicht. Ich vermute einfach einen Fehler in der Schreibweise

#!perl/bin

%ich = ("name","thales","strasse","uhlenkrog","stadt","kiel");

$alles[2] = %ich;      # Hier wird nun dem dritten Feld von '@alles' der Hash '%ich' zugewiesen

$alles[0] = "hallo";          # Das hier ist nur zur Kontrolle, ob @alles erstellt wird
$alles[1] = "du";             # Das hier ist nur zur Kontrolle, ob @alles erstellt wird
$alles[3] = "trottel";        # Das hier ist nur zur Kontrolle, ob @alles erstellt wird

print "Content-type: text/html\n\n";
print "<html><body>";
print "<h1>Das hier gibt @alles aus:</h1>";
print $alles[0];                                      # Kontrolle ... funzt
print $alles[1];                                      # kontrolle ... funzt
print $alles[3];                                      # Kontrolle ... funzt
print "<br><br><br><br>";
print $alles[2]{'stadt'};          # Ich will als Ausgabe "kiel" erhalten, aber... statt dessen gar keine...
print "</body></html>";

Danke im voraus für Hinweise, die zur Ergreifung des Fehlers führen ... <img src="http://www.broder.purespace.de/thales.jpg" alt="">

  1. Hi,

    In der vorletzten Zeile versuche ich die {'stadt'}, die im Hash
    %ich gespeichert ist aus dem dritten Feld des Arrays @alles
    aufzurufen ... aber es geht nicht. Ich vermute einfach einen
    Fehler in der Schreibweise

    Nein, dein Fehler liegt in der Erstellung des Hashs - du hast
    versucht, einen Array zu erstellen, statt eines Hashes.

    Ein Hash ist so aufgebaut:

    %hash = ("key" => "wert");

    So sähe dein Hash ungefähr so aus:

    %ich = ("name" => "thales",
            "strasse" => "uhlenkrog",
            "stadt" => "kiel");

    mfg
    CK1

    1. Hi CK1,

      Nein, dein Fehler liegt in der Erstellung des Hashs - du hast
      versucht, einen Array zu erstellen, statt eines Hashes.

      Ein Hash ist so aufgebaut:

      %hash = ("key" => "wert");

      So sähe dein Hash ungefähr so aus:

      %ich = ("name" => "thales",
              "strasse" => "uhlenkrog",
              "stadt" => "kiel");

      Laut SELFHTML kann man einen Hash auch so erstellen, wie ich es getan habe:

      <../../tgcb.htm#a3>

      ich habe trotzdem deine Schreibweise ausprobiert, allerdings ohne Erfolg ...

      Vielleicht hast ja noch eine Idee ??

      Trotzdem vielen Dank ... <img src="http://www.broder.purespace.de/thales.jpg" alt="">

  2. Hi,

    %ich = ("name","thales","strasse","uhlenkrog","stadt","kiel");

    $alles[2] = %ich;      # Hier wird nun dem dritten Feld von '@alles' der Hash '%ich' zugewiesen

    Soll jetzt nun dieser gesamte Hash in diesem einen Skalar gespeichert werden? Das geht natürlich nicht.
    (Auf meinem System speichert er nur "1/8" in $alles[2]. Was das nun bedeutet, weiß ich nicht. Mich wunder
    es schon, daß er das überhaupt ohne Fehlermeldung akzeptiert)
    Du kannst höchstens eine Referenz auf den Hash in das Array speichern. Das würde dann mit
    $alles[2] = %ich; funktionieren. (wenn ich mich recht erinnere)

    Gruß,
    Tobias

  3. Hallo,

    »»  #!perl/bin

    Das ist eine interessante shebang-zeile. Dein Interpreter heißt offenbar 'bin'  un ist immer in einem Unterverzeichnis namen 'perl' vom aktuellen Verzeichnis aus zu finden?

    lese dazu einmal
      perldoc perlrun -> Location of Perl

    $alles[2] = %ich;      # Hier wird nun dem dritten Feld von '@alles' der Hash '%ich' zugewiesen

    Du solltest
      $alles[2] = %ich;   
    bzw.
      $alles[2] = {%ich};   
    verwenden.

    Siehe dazu
      perldoc perldsc -> Array of Hashes
    bzw.
      perldoc perlref -> Making References
    bzw.
    perldoc perlreftut

    Grüße
      Klaus

  4. Danke Jungs,

    Das mit der Referenz hats gebrachts, nun funktioniert es so, wie es soll ...

    Ciau  <img src="http://www.broder.purespace.de/thales.jpg" alt="">