cgicorner.ch

Informationen rund um Perl/CGI

Sie sind hier: Home > CGI Hilfe > Tutorial > Kapitel 4 - Array/Hashes

Tutorial - Kapitel 4: Array und Hashes

Voraussetzungen für dieses Kapitel

  • Webserver mit Perl/CGI-Unterstützung

Arrays

Arrays sind eigentlich nur erweiterte Variablen. Einer normalen Variable kann immer nur ein Wert zugewiesen werden. Arrays hingegen sind Listen von Variablen. Ein Array hat mehrere Positionen, unter der eigene Werte abgespeichert werden können. Machen wir mal ein Beispiel: Wir vergleichen eine Strasse mit einem Array und die Hausnummer mit der Position. So könnten wir die Benutzer einer Strasse in einem Array abspeichern. Das sähe dann so aus (array.cgi):

#!/usr/bin/perl
print "Content-type: text/html\n\n";
$hauptstrasse[3]="Hans Muster";
$hauptstrasse[4]="Fritz Müller";
$hauptstrasse[5]="Heidi Meier";
$hauptstrasse[6]="Franz Huber";
$hauptstrasse[10]="Sepp Keller";
print "<html><body>";
print "An der Hauptstrasse 6 wohnt $hauptstrasse[6]";
# Ausgegeben wird: An der Hauptstrasse 6 wohnt Franz Huber
print "</body></html>";

Zugegeben, dies ist noch nicht sonderlich spektakulär, aber im Zusammenhang mit Schleifen werden wir Arrays sehr schnell zu schätzen wissen.

Es gibt verschiedene Möglichkeiten, Arrays abzufüllen.

  • Direkte Zuweisung. So haben wir es im oberen Beispiel gemacht.
    $myArray[4]="xyz";

  • Mittels des Befehls qw bei der Initialisierung (dies funktioniert jedoch nur, wenn keine Leerzeichen im Wert vorhanden sind). Mit diesem Befehl wird das Array der Reihe nach aufgefüllt.
    @myArray=qw(abc def ghi jkl);

  • Zuweisung bei der Initialisierung
    @myArray=("abc","def","ghi");

  • Mit dem Befehl push, welches einen neuen Eintrag unterhalb des letzten Eintrags anhängt:
    push @myArray, "abc";
    push @myArray, "def";

Wichtig im Zusammenhang mit Arrays ist noch folgendes:

  • Die Namen von Arrays haben die gleichen Einschränkungen wie Variablen
  • Immer wenn das komplette Array angesprochen wird, muss ein @ Zeichen vorangestellt werden.
  • Greift man auf einen bestimmten Eintrag im Array zu, muss ein $ Zeichen vorangestellt werden.
  • Ein Array beginnt immer mit dem 0. Eintrag
  • Die Nummer des letzten Elements eines Arrays kann mit $#myArray ausgelesen werden. Somit lässt sich mit $#myArray+1 die Anzahl Elemente eines Arrays auslesen.

Hashes

Hashes sind mit Arrays nah verwandt. Der Hauptunterschied liegt darin, dass die Elemente eines Hashes - nicht wie bei Arrays durch eine Nummer - durch einen beliebigen Text identifizierbar sind. Auch hier gibt es mehrere Möglichkeiten, diese Hashes abzufüllen:

  • Direkte Zuweisung.
    $myHash{"Position1"}="abc";
    $myHash{"Position2"}="def";


  • Zuweisung bei der Initialisierung
    %myHash=('Position1' => 'abc','Position2' => 'def');

Wichtig im Zusammenhang mit Hashes ist noch folgendes:

  • Die Namen von Hashes haben die gleichen Einschränkungen wie Variablen und Arrays
  • Immer wenn der komplette Hash angesprochen wird, muss ein % Zeichen vorangestellt werden.
  • Greift man auf einen bestimmten Eintrag im Hash zu, muss ein $ Zeichen vorangestellt werden.

System-Hash %ENV: Umgebungsvariablen

Alle Umgebungsvariabeln des Systems sind im Hash %ENV gespeichert. Wer einmal alle Umgebungsvariablen ansehen will, der lädt sich am besten einmal mein Script "env" herunter. Dieses kleine Script macht nichts anderes als alle Umgebungsvariablen aufzulisten.

Hier nur einige Beispiele: print $ENV{"HTTP_USER_AGENT"}; liefert den verwendeten Browser zurück; print $ENV{"SCRIPT_NAME"}; Pfad und Dateiname des aktuellen Scripts. Sie sehen: statt dutzende von Variablen zu definieren, ist es oft sinnvoller, die Informationen in einen Hash abzulegen. Da es viel einfacher ist, einen kompletten Hash auszugeben, als alle möglichen Variabeln zusammenzusuchen, können Sie sich wahrscheinlich auch schon vorstellen. Wie einfach es ist, erfahren Sie im Kapitel der verschiedenen Schleifen.

Zusammenfassung

In diesem Kapitel haben wir Arrays und Hashes kennen gelernt und wissen jetzt auch, wie man hier neue Einträge erfasst. Ebenfalls kennen wir den Systen-Hash mit den Umgebungsvariablen.

Wie geht's weiter?

Kapitel 5 befasst sich mit den if .. else Abfragen sowie dem Befehl unless

Im vorherigen Kapitel (3) haben wir uns mit Variablen befasst.

Sie können aber auch zurück zum Inhaltsverzeichnis und dort ein beliebiges anderes Kapitel auswählen.