SELFHTML/Navigationshilfen CGI/Perl Perl-Sprachelemente |
Skalare (Variablen) | |
Skalare deklarieren und Werte zuweisen |
|
In Perl wird eine einfache Variable, die eine Zahl oder eine Zeichenkette speichern kann, als Skalar bezeichnet.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); my $Name = "Methusalem"; my $Alter = 625; my $Name_2 = "Junger Hansel"; my $JungAlter = sqrt($Alter); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Testausgabe</title>\n"; print "</head><body>\n"; print "$Name ist ein alter Mann, sehr alt. Er ist $Alter Jahre alt<br>\n"; print "$Name_2 ist dagegen ein Jungspund. Er ist $JungAlter.<br>\n"; print "</body></html>\n"; |
Im Beispiel werden vier Skalare deklariert (erstmals im Script genannt und eingeführt): $Name
, $Alter
, $Name_2
und $JungAlter
. Alle vier Anweisungen werden hier mit my
definiert. Die Deklaration ist erforderlich, weil weiter oben im Script die Anweisung use strict;
notiert ist. Würde sie fehlen, dann wäre es erlaubt, die Variablen auch ohne Deklaration zu benutzen. Besonders bei größeren Scripts ist es jedoch besser, sich gleich einen sauberen Stil anzugewöhnen und alle Variablen zu deklarieren. Dieses Vorgehen kann die Fehlersuche im Script oftmals bedeutend erleichtern.
Ein Skalar beginnt stets mit einem Dollarzeichen $
. Das Dollarzeichen muss immer angegeben werden, wenn die Variable verwendet wird. Hinter dem Dollarzeichen folgt ein frei wählbarer Name, der jedoch den Namensvergabe genügen muss.
Skalare speichern Werte. Die Werte bekommen sie zugewiesen. Die Deklarationen der vier Skalare im Beispielscript sind typische Zuweisungen. Die Zuweisung geschieht durch das Gleichheitszeichen =
. Links davon steht der Name des Skalars, rechts davon der Wert, der zugewiesen wird. Das kann ein direkt notierter Wert sein, also etwa "Methusalem"
oder 625
. Es kann aber auch ein Ausdruck sein, der den Wert erst errechnet. Bei der Deklaration von $JungAlter
wird im Beispiel eine Perl-Funktion aufgerufen, die zu einer Zahl die Quadratwurzel berechnet und den errechneten Wert zurückgibt ( sqrt). Dieser Rückgabewert wird dem Skalar $JungAlter
zugewiesen.
Bei der Deklaration eines Skalars können Sie - wie in den obigen Beispielen - einen Initialisierungswert (Anfangswert) zuweisen. Es ist aber auch möglich, einen Skalar ohne Wertzuweisung zu deklarieren. Dann lassen Sie die Wertzuweisung einfach weg und notieren eine Anweisung, die einfach aus dem Namen des Skalars und dem die Anweisung abschließenden Semikolon besteht (z.B. my $Name;
). Wenn ein Skalar auf diese Weise deklariert ist, hat er den Wert "undefiniert" (undef). Wenn Sie die w-Option benutzen, gibt der Perl-Interpreter Ihnen eine Warnung aus, wenn Sie mit einen solchen undefinierten Wert weiterarbeiten wollen.
Sie können Skalaren numerische Werte, Zeichenketten (Strings) und Referenzen zuweisen. Ob ein Skalar numerisch oder eine Zeichenkette ist, entscheiden Sie, indem Sie dem Skalar einen Wert zuweisen oder indem Sie ihn in einer Anweisung verwenden. Eine Zeichenkette muss dabei in Anführungszeichen stehen. Das können sowohl doppelte Anführungszeichen als auch einfache Anführungszeichen sein (zum Unterschied siehe Regeln beim Notieren von Zeichenketten). Im obigen Beispiel speichern die Skalare $Name
und $Name_2
Zeichenketten, während die Skalare $Alter
und $JungAlter
Zahlen speichern.
Das obige Beispiel-Script sendet als CGI-Script den HTTP-Header und HTML-Code an den Browser. Dabei verwendet es die Skalare in den print
-Anweisungen an den nötigen Stellen. Im HTML-Code, der beim Browser ankommt, erscheint dann an der entsprechenden Stelle der aktuelle Wert des Skalars.
Skalare können sowohl Zahlen als auch Zeichenketten speichern. Auch ein und derselbe Skalar kann im Laufe eines Scripts mal eine Zahl, mal eine Zeichenkette speichern. Die so genannte Typumwandlung, die in klassischen Programmiersprachen entweder gar nicht möglich ist oder mit einer eigenen Anweisung durchgeführt werden muss, erfolgt bei Perl automatisch.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); my $Wert = 123456; my $Teilwert = substr($Wert,1,3); $Wert = $Teilwert; print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Testausgabe</title>\n"; print "</head><body>\n"; print "<var>Teilwert</var> lautet: <b>$Teilwert</b><br>\n"; print "Und <var>Wert</var> lautet: <b>$Wert</b><br>\n"; print "</body></html>\n"; |
Im Beispiel wird ein Skalar $Wert
deklariert und bekommt dabei eine Zahl zugewiesen. Anschließend wird ein weiterer Skalar $Teilwert
deklariert. Diesem Skalar wird der Rückgabewert einer Perl-Funktion zugewiesen, nämlich der Funktion substr. Dies ist eine typische Zeichenkettenfunktion. Sie extrahiert aus einer Zeichenkette einen Teil davon. Nun werden Zahlen im Computer aber anders gespeichert als Zeichenketten. In den meisten anderen Programmiersprachen wäre es deshalb ein schwerer Fehler zu versuchen, einer solchen Zeichenkettenfunktion eine Zahl zu übergeben. In Perl ist das jedoch kein Problem. Im Beispiel wird der Funktion einfach $Wert
übergeben, also der Skalar, in dem zu diesem Zeitpunkt eine Zahl gespeichert ist. Perl bewertet die Zahl bei dem Wunsch, eine Zeichenkettenfunktion darauf anzuwenden, automatisch als Zeichenkette, sprich, als Abfolge von Ziffern, Dezimalzeichen usw.
Im Beispiel extrahiert die Funktion substr
die Zeichen 2 bis 4 der Zeichenkette (übergeben werden Startposition und Länge, aber in Perl wird bei solchen Dingen immer bei 0 zu zählen begonnen, nicht bei 1, daher werden 1
und 3
übergeben). Wenn man die Zahl 123456
als Zeichenkette interpretiert, wird
also einfach 234
extrahiert. Diesen Wert gibt die Funktion substr
im obigen Aufruf auch zurück - aber als Zeichenkette. Denn substr
gibt immer und in jedem Fall eine Zeichenkette zurück. In der darauffolgenden Beispielanweisung $Wert = $Teilwert
wird nochmals die Fähigkeit von Perl zur automatischen Typumwandlung auf die Probe gestellt. Denn mit dieser Anweisung bekommt $Wert
, worin ja bis dahin eine Zahl gespeichert ist, plötzlich eine Zeichenkette zugewiesen, nämlich den Wert von $Teilwert
, der ja aus dem Rückgabewert von substr
ermittelt wurde und eine Zeichenkette ist. Wenn Sie andere Programmiersprachen kennen, werden Sie hieran ermessen können, welche Freiheiten Sie in Perl beim Umgang mit Variablen haben.
Das obige Beispiel sendet HTML-Code an den aufrufenden Browser und gibt die aktuellen Werte der Skalare aus.
Der Perl-Interpreter versucht sein Bestes, die Werte Ihrer Variablen zu verarbeiten. Das heißt, wenn Sie beispielsweise mit einer Zeichenkette numerische Operationen durchführen (z.B. 3 + "Text"
), wird diese Zeichenkette in einen numerischen Wert konvertiert, und zwar in 0. Genauso können Sie auch eine Zeichenkette und eine Referenz miteinander verketten. Die Anweisung print "Text".$ref;
(wobei $ref
eine Referenz enthält) könnte also beispielsweise die Ausgabe TextSCALAR(0x1765158)
erzeugen.
Skalare sind Variablen. Man benutzt sie, um einen Speicherort für Werte zu haben, die sich im Verlauf des Scripts ändern können. Skalare ändern ihren gespeicherten Wert, indem ihnen ein neuer Wert zugewiesen wird. Solche zugewiesenen Werte sind jedoch oft keine direkten Werte, sondern Rückgabewerte von Funktionen, die irgendetwas berechnen oder leisten. In den Beispielen weiter oben kamen bereits zwei solcher Funktionen zum Einsatz: die Funktion sqrt
zum Errechnen einer Quadratwurzel, und die Funktion substr
zum Ermitteln einer Teilzeichenkette. Perl bietet viele solcher Funktionen an. Typische Funktionen, mit denen Sie den Wert von Skalaren beeinflussen können, sind beispielsweise die Funktionen für Zeichenketten oder die Funktionen für Berechnungen. Darüber hinaus werden Skalare oft auch im Zusammenhang mit Schleifen benötigt und verändert. Zeichenketten können Sie beispielsweise auch miteinander verknüpfen, und mit Zahlen können Sie rechnen. Dazu benötigen Sie Operatoren.
Listen bzw. Arrays (Variablen) | |
CGI-notwendige Anweisungen in Perl | |
SELFHTML/Navigationshilfen CGI/Perl Perl-Sprachelemente |
© 2001 selfhtml@teamone.de