Perl entstand 1987, als Larry Wall bei einer Firma in Kalifornien Berichte aus vielen Textdateien zusammenstellen musste und die Werkzeuge dafür zu umständlich fand. Perl ist eine Skriptsprache, die besonders gut mit Text umgehen kann: Zeilen lesen, Muster darin finden, umbauen und ausgeben. In den 1990er Jahren liefen große Teile des frühen Webs mit Perl, weil Webserver damit Seiten erzeugen konnten, und Systemadministratoren schrieben ihre Werkzeuge damit. Bis heute ist Perl auf fast jedem Linux-System installiert, auch in deinem Workspace.
Larry Wall (geboren 1954), amerikanischer Programmierer, hat Sprachwissenschaft studiert. 1987 veröffentlichte er Perl, weil er Berichte aus vielen Textdateien zusammenstellen musste und die Werkzeuge dafür zu umständlich fand. Man merkt Perl seine Sprachwissenschaft an: Wie in einer natürlichen Sprache gibt es für fast alles mehrere Arten, es zu sagen (»There's more than one way to do it«), und Variablen tragen ein Zeichen vor dem Namen, das wie ein Artikel sagt, was gemeint ist: $ für einen einzelnen Wert, @ für eine Liste.
Vor Perl hatte er schon patch geschrieben, das Programm, das Änderungen an Dateien einspielt und das es bis heute auf jedem Linux-System gibt. Aus seinem Plan für ein Perl 6 wurde eine eigene Sprache, die seit 2019 Raku heißt.
Foto: Randal Schwartz, 2007, CC BY-SA 2.0, zugeschnitten (Wikimedia Commons)
Lege mit StrgAltN eine neue Datei an und schreib hinein:
use strict; use warnings; print "Hello, World!\n"; |
Speichere sie mit StrgS als /workspace/hello.pl. Die ersten beiden Zeilen schalten Prüfungen ein: use strict verlangt, dass du jede Variable mit my anlegst, bevor du sie benutzt, und use warnings warnt bei Verdächtigem. Jede Anweisung endet mit einem Semikolon, und \n ist ein Zeilenumbruch.
Visual Studio Code kennt Perl schon und zeigt das Programm farbig, sobald die Datei mit der Endung .pl gespeichert ist:

Öffne ein Terminal mit StrgJ und führe das Skript aus:
perl hello.pl

Speichere dein erstes Skript als /workspace/hello.pl und führe es mit
perl hello.pl aus.
Ein weißer Punkt am Reiter der Datei heißt, dass sie noch nicht gespeichert ist.
Schreib in hello.pl statt print einmal pritn, speichere und führe das Skript wieder aus. Lies, was Perl meldet:
In welcher Zeile von hello.pl findet Perl den Fehler? Die Zahl steht
in der Meldung hinter line.
Die Meldung endet mit at hello.pl line …, near ….
Hier geht es weiter, sobald du deine Antwort oben abgegeben hast.

Perl liest erst das ganze Skript, bevor es etwas ausführt. Ein Wort, das es nicht kennt, gefolgt von einem Text, kann es nicht lesen, und so bricht es ab, bevor die erste Zeile läuft. Denk daran, den Fehler wieder zu beheben.
Im zweiten Beispiel zerlegt Perl eine Zahl in ihre Primfaktoren. <STDIN> liest eine Zeile, die du eintippst, mit dem Zeilenumbruch am Ende, und chomp schneidet ihn ab. @factors ist eine Liste, push hängt etwas an. Erstelle eine neue Datei factor.pl:
use strict; use warnings; print "Please enter the number to factorise:\n"; my $number = <STDIN>; chomp $number; # try every divisor from 2 on; a divisor that fits is a prime factor my @factors; my $divisor = 2; while ($number > 1) { if ($number % $divisor == 0) { push @factors, $divisor; $number /= $divisor; } else { $divisor++; } } print "Prime factors: @factors\n"; |

Ein Text, der wie eine Zahl aussieht, ist für Perl eine Zahl, sobald man mit ihm rechnet. Darum kann $number % $divisor rechnen, obwohl <STDIN> einen Text gelesen hat.
Was gibt print "3" + "4"; aus? Überleg erst, dann probier es aus:
perl -e 'print "3" + "4", "\n"' im Terminal.
Hier geht es weiter, sobald du deine Antwort oben abgegeben hast.
perl -e 'print "3" . "4", "\n"'. Probier auch "3" x 4 und "3" * "4" und achte darauf, wann Perl rechnet und wann es mit Text arbeitet.
Im dritten Beispiel sortiert Perl eine Liste von zehn Zufallszahlen mit Bubblesort. Die Liste heißt @list, ein einzelnes Element darin $list[$i]: Es ist ein einzelner Wert, darum das $. $#list ist der Index des letzten Elements, und @list[$i, $i + 1] = @list[$i + 1, $i] vertauscht zwei Nachbarn in einem Schritt.
use strict; use warnings; my @list = map { int(rand(100)) } 1 .. 10; print "Original list: @list\n"; # swap neighbours in the wrong order until a pass swaps none my $sorted = 0; until ($sorted) { $sorted = 1; for my $i (0 .. $#list - 1) { if ($list[$i] > $list[$i + 1]) { @list[$i, $i + 1] = @list[$i + 1, $i]; $sorted = 0; } } } print "Sorted list: @list\n"; |
Speichere es als bubblesort.pl und führe es aus:

sort: Schreib my @sorted = sort { $a <=> $b } @list; und gib @sorted aus. Achte darauf, was passiert, wenn du nur sort @list schreibst und eine Zahl unter 10 dabei ist.
Ändere bubblesort.pl so, dass die größte Zahl zuerst kommt, und
starte das Skript noch einmal.
Die Zeile, die entscheidet, steht in der inneren Schleife: if ($list[$i] > $list[$i + 1]).
Ein einziges Zeichen in dieser Zeile entscheidet, wann zwei Nachbarn vertauscht werden.
Du hast an drei Beispielen gesehen, wie ein Perl-Skript aussieht und wie du es ausführst. Seine Stärke zeigt Perl bei Text: Mit regulären Ausdrücken, die in Perl so selbstverständlich sind, dass sie später in fast alle anderen Sprachen übernommen wurden, findet und ersetzt es Muster in jeder Zeile einer Datei. Wie reguläre Ausdrücke funktionieren, zeigt die Aktivität Reguläre Ausdrücke. Die Dokumentation zu Perl findest du unter perldoc.perl.org.
Programming Perl, Larry Wall, Tom Christiansen und Randal L. Schwartz, O'Reilly, 1991, nach dem Tier auf dem Umschlag »das Kamelbuch«. Das Buch, das Larry Wall selbst über seine Sprache geschrieben hat, mit vielen Beispielen und Witz; seitdem ist das Kamel das Zeichen von Perl.