Perl/Skalare

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

[Bearbeiten] Skalare deklarieren und Werte zuweisen

In Perl wird eine einfache Variable, die eine Zahl oder eine Zeichenkette speichern kann, als Skalar bezeichnet.

Beispiel
#!/usr/bin/perl -w
 
use strict;
use CGI::Carp qw(fatalsToBrowser);
 
my $Alter_Mensch  = "Methusalem";
my $Alter_Jahre   = 625;
my $Junger_Mensch = "Junger Hansel";
my $Junger_Jahre  = sqrt($Alter_Jahre);
 
# Beispiel wird weiter unten fortgesetzt
Im Beispiel werden vier Skalare deklariert (erstmals im Script genannt und eingeführt): $Alter_Mensch, $Alter_Jahre, $Junger_Mensch und $Junger_Jahre. Alle vier Variablen 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 Regeln zur Namensvergabe genügen muss.

Skalare speichern Werte. Die Werte bekommen sie zugewiesen. Die Deklarationen der vier Skalare im Beispiel-Script 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 $Junger_Jahre wird im Beispiel eine Perl-Funktion aufgerufen, die zu einer Zahl die Quadratwurzel berechnet und den errechneten Wert zurückgibt (sqrt). Erst dieser Rückgabewert wird dem Skalar $Junger_Jahre 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 $Alter_Mensch;). Wenn ein Skalar auf diese Weise deklariert wird, ist sein Wert undefiniert (undef). Wenn Sie die w-Option benutzen, gibt der Perl-Interpreter Ihnen eine Warnung aus, sofern Sie mit einem 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 $Alter_Mensch und $Junger_Mensch Zeichenketten, während die Skalare $Alter_Jahre und $Junger_Jahre Zahlen speichern.
# Fortsetzung des Beispiels
 
print <<"ENDE";
Content-type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Testausgabe</title>
</head><body>
 
  $Alter_Mensch ist ein sehr, sehr alter Mann. Er ist $Alter_Jahre Jahre alt!<br>
  $Junger_Mensch ist dagegen ein Jungspund. Er ist erst $Junger_Jahre!<br>
 
</body></html>
ENDE
Das obige Beispiel-Script gibt als CGI-Script den HTTP-Header und HTML-Code aus. Dabei verwendet es die Skalare in der print-Anweisungen an den nötigen Stellen. Die Syntax print <<"ENDE"; deklariert alle folgenden Zeilen bis zum nächstfolgenden ENDE als Argument für den Ausdruck. Im HTML-Code, der beim Browser ankommt, erscheint dann an der entsprechenden Stelle der aktuelle Wert des Skalars.

[Bearbeiten] Typ-Umwandlung von Skalaren

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.

Beispiel
#!/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 Zeichenketten-Funktion. 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 Zeichenketten-Funktion 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 Zeichenketten-Funktion 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.
Beachten Sie: 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.

[Bearbeiten] Funktionen und Operationen zum Manipulieren von Skalaren

Skalare sind Variablen. Man benutzt sie, um Werte zu speichern, 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.

Meine Werkzeuge
Namensräume

Varianten
Aktionen
Übersicht
Index
Mitmachen
Werkzeuge
Spenden
SELFHTML