Perl 6

Die Zukunft des Programmierens

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