Zurück

Voriges Kapitel: Einführung in Perl

 

Perl-Variablen
von

Perl kennt drei Arten von Variablen:

  1. Normale Variablen (werden auch als skalare Daten bezeichnet). Kennzeichen: "$"
  2. Eindimensionale Felder (werden in Perl als Array bezeichnet). Kennzeichen: "@"
  3. Assoziative Felder (werden als Hash bezeichnet). Kennzeichen: "%"

Im Gegensatz zu den meisten anderen Programmiersprachen unterscheidet Perl jedoch keine Datentypen. Variablen sind in der Lage Zahlen (sowohl Ganz- als auch Floatzahlen) oder Zeichenketten aufzunehmen. Variablen müssen vor ihrer Benutzung auch nicht deklariert werden. Die erste Benutzung einer Variablen erzeugt diese auch.

1. "Skalare Variablen"

Skalare Variable erkennt man an einem "$" als erstem Zeichen des Variablennamens. Das nächste Zeichen muß ein Buchstaben sein. Der restliche Variablenname kann aus einer Mischung von Zeichen, Ziffern und Unterstrichen bestehen. Wie bereits weiter oben erwähnt kann eine solche Variable verschiedene Datentypen aufnehmen.

Die Variabel $var kann einmal eine Zahl ($var = 23;) und kurz darauf im selben Programm eine Zeichenkette ($var = "Perl";) aufnehmen. Wurde eine Zahl in Form einer Zeichenkette als Variableninhalt erklärt

$var = "12";

kann damit sogar ohne weiteres gerechnet werden

print $var = $var * 2;

Diese Perlzeile führt zur Ausgabe der Zahl "24". Perl führt die Typkonvertierung zwischen Zahlen und Zeichenketten selbständig durch.

2. "Eindimensionales Feld" bzw. "Array"

Die Umsätze eines Unternehmens im Verlauf eines Jahres stellen z.B. logisch zusammengehörige Werte dar.

Da Monate auch häufig mit Ziffern bezeichnet werden könnte man auch diese Liste also auch folgendermaßen schreiben:

Diese Liste besteht nun wie bereits weiter oben gesagt aus logisch zusammengehörigen und geordneten Werten. Die einzelnen Werte können einfach durchnummeriert werden, so dass der Zugriff über eine Indexnummer erfolgen kann.

Derartige Listen können in den meisten Programmiersprachen in Form von "Feldern" oder "Arrays" zusammengefaßt werden. Alle Werte werden geordnet in einem einzigen Feld abgelegt (Achtung: Nur die Werte werden abgelegt, nicht die Indizes):

Zugriffs-Index

Umsatz im
jeweiligen Monat

0
1
2
3
...

0

200

250

300

...

Wie skalare Variablen erhalten auch Felder eine Bezeichnung. Zur eindeutigen Unterscheidung gegenüber einer skalaren Variablen ist das erste Zeichen des Namens ein "@". Das obige Feld könnte also den Namen @monatsumsatz tragen. Beachten sie aber den Startwert der Indexspalte. Das erste Element eines Feldes hat immer die Indexnummer "0". In diesem Beispiel ist diesem Umsatz der Wert "0" zugeordnet.

Der Zugriff auf einen einzelnen Feldwert erfolgt z.B. mit

$monatsumsatz[2] = $monatsumsatz[2] + 100;

und erhöht hier den Umsatz des Monats Februar um 100. Im Feldeintrag  ist nun der Wert "350" enthalten. Wie bei skalaren Variablen erfolgt die Typkonvertierung automatisch, so dass diese Zahl auch in eine Zeichenkette integriert werden kann.

print "Umsatz im Monat Februar ist : " . $monatsumsatz[2] . "DM";

und liefert hier die Ausgabe "Umsatz im Monat Februar ist: 350DM".

Mit Hilfe von Schleifen und Indexvariablen kann auch ein ganzes Array komfortabel bearbeitet werden:

for ($i = 1; $i <=12; $i = $i + 1){
  $monatsumsatz[$i] = $monatsumsatz[$i] . " DM";

}

Das Feld sieht nun folgendermaßen aus:

Zugriffs-Index

Umsatz im
jeweiligen Monat

0
1
2
3
...

0

200 DM

350 DM

300 DM

...

An jedes Feldelement wurde die Zeichenkette " DM" angehängt.

Wie skalare Variablen wird ein Feld beim ersten Zugriff erzeugt. Die Zeile

$array[0] = "Erster Wert";

generiert das Feld @array. Die Erweiterung des Feldes funktioniert genauso. Im Gegensatz zu anderen Programmiersprachen müssen sie also das Feld weder deklarieren noch seine Größe festlegen. Je nach Bedarf wird es durch Perl dynamisch vergrößert.

Ein Feld kann in Perl jedoch auch ganz anders dargestellt werden. Stellen Sie sich einfach vor sie schreiben alle Feldelemente, beginnend beim Ersten, in einer Reihe hintereinander. Als Trennzeichen verwenden sie ein ",". Wenn der Feldwert eine Zahl ist, dann können sie ihn schreiben wie er ist, handelt es sich um ein Zeichen oder um eine Zeichenkette, so setzen sie den Wert in Anführungszeichen. Zuletzt klammern sie das entstandene Gebilde mit runden Klammern ein. Unser bisheriges Beispiel würde dann also folgendermaßen aussehen:

(0, "200 DM", "350 DM", "300 DM", ...)

Für Perl ist dies ebenfalls eine gültige Darstellung eines Felds (genaugenommen ein Feld ohne Namen => ein anonymes Feld). Damit läßt sich ein Feld aber auch anders initialisieren. Sie können somit zur Genrierung unseres Beispiel einfach die folgende Schreibweise verwenden:

@monatsumsatz = (0, "200 DM", "350 DM", "300 DM", ...);

Bei dieser Schreibweise handelt es sich einfach um eine Liste von Werten die in runden Klammern stehen. In Perl spricht man deshalb bei eindimensionalen Feldern auch häufig nur von Listen, bzw. von Listenvariablen. Das obige Beispiel war so gesehen die Zuweisung einer Liste an eine Listenvariable.

Genau diese Zuweisung läßt sich aber auch umdrehen:

( $keinmonat, $januar, $februar, $maerz, ...) = @monatsumsatz;

Auf beiden Seiten der Zuweisung steht jeweils eine Liste bzw. ein eindimensionales Feld.

Perl weist nun der Reihe nach jeweils einem Feldelement der linken Seite ein Feldelemten der rechten Seite zu. Würde man die dadurch automatisch entstehenden Zuweisungen einzeln aufschreiben, so sähe das so aus:

$keinmonat = $monatsumsatz[0];
$januar = $monatsumsatz[1];
$februar = $monatsumsatz[2];
$maerz = $monatsumsatz[3];
...

3. "Assoziatives Feld" oder "Array" bzw. "Hash" in Perl

Der Begriff "assoziatives Array" beschreibt bereits die Funktionsweise dieser Datenstruktur. Da er den "Perl"-Profis aber zu unhandlich ist, wird im allgemeinen nur von einem Hash (sprich: "häsch") gesprochen. Zur Erklärung möchte ich zuerst nocheinmal die Struktur eines Lexikons in ihr Gedächtnis rufen da mir dieser Vergleich ziemlich treffend erscheint. In einem Lexikon wird jeweils einem Begriff eine Erklärung zugeordnet.

Auszug aus einem Fremdwörterbuch:
Aspis(schlange), die: afrikanische Brillenschlange
Assignate, die: (fr.) -/-n: fr. Banknote (1790 ausgegeben, 1796 als wertlos gewordenes Papiergeld außer Kurs gesetzt).
assoziativ Bw. durch Verbindung bzw. Verknüpfung von Sinneseindrücken bewirkt, bzw. sie hervorrufend.

Die erste Spalte ist eine Art Schlüsselwort dessen Erklärung gesucht wird. Um die zugehörige Erklärung zu finden, muß man dieses Schlüsselwort kennen und im Lexikon auffinden. Da die Schlüsselwörter alphabetisch angeordnet sind, ist das normalerweise kein Problem. Anschließend wird in der zweiten Spalte die Erklärung nachgelesen.

Den gesamten Vorgang könnte man sich als Programmierer auch als eine Funktion lexikon() vorstellen. Dieser Funktion wird ein Schlüsselwort übergeben und nach kurzer Verarbeitungsdauer erhält man die Erklärung als Ergebnis. Als Code-Zeile eines Programms würde das dann so aussehen:

erklaerung = lexikon("assoziativ");

Die Variable erklaerung enthält nach der Abarbeitung der Programmzeile den Erklärungstext aus dem obigen Lexikon.

Ein Hash funktioniert prinzipiell genau gleich. Sie können es sich auch als zweispaltiges Gebilde vorstellen in dem die erste Spalte die "Schlüssel" enthält und die zweite Spalte die dem Schlüssel zugeordneten (assoziierten) Werte. Nachfolgend ein Hashbeispiel bei dem jeweils einem Nachname ein Vorname zugeordnet wird:

Spalte 1:
Schlüsselspalte
Spalte 2:
Assoziierte Werte
Reisser Fritz
Meier Paul

Der Hash   %name

Im Gegensatz zu einem Lexikon sind jedoch die Schlüssel nicht geordnet. Dies ist aber auch nicht notwendig da Perl das Auffinden der richtigen Hashzeile selbst übernimmt. Ähnlich wie bei der obigen Funktion lexikon() kann damit ganz schnell auf den zu einem Schlüssel zugeordneten Wert zugegriffen werden.

Zur Unterscheidung von skalaren (eindimensionalen) bzw. Listenvariablen beginnen Hashnamen mit einem führenden "%"-Zeichen. Der obige Hash könnte somit die Bezeichnung %name haben. Wenn sie jedoch einen Zugriff auf einen einzelnen Hashwert ausführen, müssen sie wieder mit dem "$"-Syntax der skalaren Variablen arbeiten (ein einzelner Hashwert ist eine skalare Größe). Der Syntax für eine Hash-Zugriff sieht also folgendermaßen aus:

$vorname = $name{"Reisser"};

Die Variable $vorname hat nach dieser Zuweisung den Wert "Fritz".

Auf die gleiche Weise können sie auch einen Wert in den Hash einfügen:

$name{"Meroth"} = "Michael";

Der Hash wird damit um eine "Zeile" erweitert.

Spalte 1:
Schlüsselspalte
Spalte 2:
Assoziierte Werte
Reisser Fritz
Meier Paul
Meroth Michael

Beachten sie aber, daß die Schlüsselspalte eindeutig ist. Es kann keine zwei Zeilen mit identischem Eintrag im Schlüsselfeld geben. Falls sie also versuchen sollten unserem Hash noch einen "Roland Meier" hinzuzufügen, so wird der bereits bestehende Hash-Eintrag verändert.

$name{"Meier"} = "Roland";

Der dem Schlüssel "Meier" zugeordnete Wert "Paul" wird auf "Roland" geändert.

Spalte 1:
Schlüsselspalte
Spalte 2:
Assoziierte Werte
Reisser Fritz
Meier Roland
Meroth Michael


Voriges Kapitel: Einführung in Perl

Zurück


Zaehler Lokal bzw. Remote-Zugriffe seit dem 17. September 2000