Was ist Perl?
Perl (Practical Extraction and Report Language) wurde 1987 von Larry Wall entwickelt, ursprünglich zum Auswerten von Textdateien. Perl glänzt bei Textverarbeitung und regulären Ausdrücken, ist ein Klassiker der Systemadministration und der Bioinformatik und steckt in vielen Altsystemen. Das Motto: There's more than one way to do it (TMTOWTDI).
Perl 5 ist die verbreitete Version; "Perl 6" heißt heute eigenständig Raku.
Ausführen
perl hallo.pl # Datei
perl -e 'print "Hallo\n"' # Einzeiler
perl -ne 'print if /fehler/i' log.txt # Zeilenfilter (wie grep)
perl -pe 's/alt/neu/g' datei # Filter und Ersetzen (wie sed)
perl -v # VersionDas erste Skript
#!/usr/bin/perl
use strict; # Variablen müssen deklariert werden
use warnings; # Warnungen bei verdächtigem Code
use utf8; # Quelltext ist UTF-8
binmode(STDOUT, ":utf8"); # Ausgabe als UTF-8
my $name = "Mia";
print "Hallo, $name!\n";
print 'Einfache Quotes ersetzen nichts: $name', "\n";
printf("%s ist %d Jahre alt\n", $name, 17);
say_hallo();
sub say_hallo { print "Hallo aus einer Funktion\n"; }Hallo, Mia! Einfache Quotes ersetzen nichts: $name Mia ist 17 Jahre alt Hallo aus einer Funktion
Immer use strict; use warnings; an den Anfang: Das fängt Tippfehler und viele Fehler ab. Anweisungen enden mit ;, Kommentare beginnen mit #.
Sigils: Zeichen vor dem Namen
Der erste Buchstabe verrät den Variablentyp:
| Sigil | Typ | Beispiel |
|---|---|---|
$ | Skalar (ein Wert: Zahl, Text, Referenz) | $name, $liste[0] |
@ | Array (Liste) | @liste |
% | Hash (Zuordnung) | %alter |
& | Funktion (selten nötig) | &funktion |
use strict; use warnings;
my $zahl = 42;
my @liste = (1, 2, 3);
my %hash = (a => 1);
print "Skalar: $zahl, Array: @liste, Hash-Wert: $hash{a}, Element: $liste[1]\n";
print "Länge der Liste: ", scalar(@liste), "\n";Skalar: 42, Array: 1 2 3, Hash-Wert: 1, Element: 2 Länge der Liste: 3
Kontext
Perl wertet Ausdrücke je nach Umgebung unterschiedlich aus (Listenkontext vs. Skalarkontext). Ein Array im Skalarkontext liefert seine Länge:
use strict; use warnings;
my @a = (10, 20, 30);
my $anzahl = @a; # Skalarkontext: Anzahl
my ($erstes) = @a; # Listenkontext: erstes Element
print "$anzahl $erstes\n";
print "Letzter Index: $#a, Letztes: $a[-1]\n";
print "Elemente: " . @a . "\n"; # . erzwingt Skalarkontext3 10 Letzter Index: 2, Letztes: 30 Elemente: 3
So führst du den Code aus: Datei hallo.pl speichern und mit perl hallo.pl ausführen. Einzeiler direkt mit perl -e 'print "Hallo\n"'.
Merke
- Perl ist stark in Text und regulären Ausdrücken
- Immer
use strict; use warnings; - Sigils:
$Skalar,@Array,%Hash - Kontext: Array im Skalarkontext = Länge
- Einzeiler:
perl -ne,perl -pe
Aufgabe
Schreibe ein Skript, das deinen Namen und die Länge deines Namens ausgibt.