Variablen
In den Programmen der vorherigen Kapitel hat sich noch nicht so viel bewegt, alle vorkommenden Werte waren konstant. Das soll sich in diesem Kapitel ändern.
Alle Werte, die sich in einem Programm ändern können während es ausgeführt wird, werden in Variablen gespeichert.
In Perl starten alle Variablen mit einem Sonderzeichen (sogenanntem Sigil):
use v6; my $a; $a = $*IN.get; my $b = $*IN.get; my $summe = $a + $b; say "Die Summe von ", $a, " und ", $b, " ist: ", $summe;
Wenn man dieses Programm startet, erwartet es die Eingabe von zwei Zahlen, jeweils gefolgt von Enter, also dem Zeilenende. Wenn man z. B. 4 und -10 eingibt, lautet die Ausgabe:
Die Summe von 4 und -10 ist -6
Das Programm im Detail
Die erste Zeile ist die selbe wie immer, dann wird es interessant:
my $a;
my $a sagt dem Perl-Interpreter, dass ab jetzt in dem
Programm eine Variable namens $a vorkommt. Man sagt man
"deklariert" die Variable.
Eine Variable besteht aus einem Sonderzeichen (Sigil), in diesem
Fall $, und dem eigentlich Namen, der aus Buchstaben,
Ziffern und Unterstrichen bestehen kann, wobei er nicht mit einer
Ziffer anfangen sollte.
Gültige Variablennamen wären zum Beispiel
$summe, $anzahl_haeuser oder
$MeinAuto. Zwischen Groß- und Kleinschreibung wird
unterschieden, das heisst $a und $A sind
verschiedene Variablen.
$a = $*IN.get;
Hier wird der Variable $a ein Wert zugewiesen. Der
Wert steht auf der rechten Seite des Gleichheitszeichens, hier
$*IN.get. Die besondere Variable $*IN steht für
alle Eingaben, die auf der Tastatur gemacht werden.
Die Konstruktion $*IN.get weist Perl an, eine Zeile von
der Tastatur zu lesen, d.h. das Programm pausiert so lange, bis der
Benutzer etwas eingegeben hat und dann auf Enter gedrückt hat.
my $b = $*IN.get;
Diese beiden Zeilen machen das gleiche wie die drei Zeilen davor,
nur dass die Eingabe dieses mal in der Variablen $b
gespeichert wird.
Die Deklaration my $b; und die Zuweisung $b =
$*IN.get; wurden diesmal in eine Zeile zusammengezogen,
die das gleiche macht wie die beiden einzelnen Zeilen.
my $summe = $a + $b;
Hier wurde wieder eine neue Variable deklariert,
$summe, und ihr $a + $b zugewiesen, also die
Summe von $a und $b.
say "Die Summe von ", $a, " und ", $b, " ist: ", $summe;
In dieser Zeile werden die beiden Variablen $a und
$b ausgegeben, zusammen mit dem Ergebnis der Addition,
$summe, zusammen mit ein bisschen Text.
Fließkommazahlen
Die Variablen können natürlich nicht nur ganze Zahlen speichern, sondern auch sogenannte "Fließkommazahlen":
my $radius = 0.2; my $flaeche = $radius * $radius * pi; say "Ein Kreis mit Radius ", $radius, " hat die Fläche ", $flaeche;
Die Ausgabe davon wird etwa so aussehen:
Ein Kreis mit Radius 0.2 hat die Fläche 0.125663706
wobei die Anzahl der Nachkommstellen auch anders sein kann.
Kommastellen werden in Perl, wie im englischsprachigen Raum üblich,
mit einem Punkt '.' statt einem Komma abgetrennt, daher 0.2
anstatt 0,2.
Zeichenketten
Variablen können nicht nur Zahlen enthalten, sondern auch Zeichenketten, also Text, auf Englisch "Strings".
Tatsächlich ist die Verarbeitung von Text traditionell eine der großen Stärken von Perl gewesen, und ist es auch jetzt noch. Hier ein Beispiel, wie man Strings einer Variable zuweisen kann:
use v6; my $name = "Larry Wall"; say $name, " ist der Erfinder von Perl";
Dem aufmerksamen Leser fällt an dieser Stelle vielleicht auf, dass wir schon vorher Strings verwendet haben, z. B. in der Zeile
say "Ein Kreis mit Radius ", $radius, " hat die Fläche ", $flaeche;
Der Text zwischen den Anführungszeichen ist jeweils ein String, hier ein konstanter.
Obige Zeile hätte man auch anders schreiben können:
say "Ein Kreis mit Radius $radius hat die Fläche $flaeche";
Was passiert hier? In einem String, der von doppelten
Anführungszeichen " begrenzt ist, werden Variablennamen,
die mit einem Dollarzeichen $ anfangen, durch ihren Wert
ersetzt. Man sagt der String werde interpoliert.
Wenn man das verhindern möchte, z.B. weil man Dollarzeichen ausgeben möchte, kann man den String stattdessen in einfache Anführungszeichen setzen:
my $zahl = 12; my $s1 = "Interpolierter String: $zahl"; my $s2 = 'Nicht-interpolierter String: $zahl'; say $s1; say $s2;
ergibt folgende Ausgabe:
Interpolierter String: 12 Nicht-interpolierter String: $zahl
Perl hat viele eingebaute Funktionen, die Strings verarbeiten. Hier werden ein paar vorgestellt, die die Groß- und Kleinschreibung (Englisch: Lower Case und Upper Case) beeinflussen. Die meisten wirklich mächtigen Funktionen werden aber erst später vorgestellt.
my $str = "hEUTe NACht"; say uc $str; # HEUTE NACHT say lc $str; # heute nacht say ucfirst $str; # HEUTe NACht say lcfirst $str; # hEUTe NACht say capitalize $str; # Heute Nacht
Typen
Variablen, die mit einem $ beginnen, werden Skalare
genannt, und können beliebige Werte enthalten.
Wenn man das einschränken möchte, kann man den Variablen einen sogenannten "Typ" geben:
my Num $zahl; # $zahl kann nur Zahlen enthalten my Int $ganze_zahl; # $ganze_zahl kann nur ganze Zahlen enthalten my Str $string; # $string kann Zeichenketten enthalten