Variablen und Operatoren
| Thema | Syntax |
|---|---|
| Skalar / Array / Hash | $x, @a, %h |
| Element | $a[0], $h{key}, $r->[0], $r->{key} |
| Länge / letzter Index | scalar(@a), $#a |
| Zahlen vergleichen | == != < > <= >= <=> |
| Text vergleichen | eq ne lt gt le ge cmp |
| Logik | && || ! // and or not |
| Verketten / wiederholen | . und x |
| Bereich | 1..10, 'a'..'e' |
Wichtige Funktionen
| Bereich | Funktionen |
|---|---|
| Text | length substr index rindex uc lc ucfirst lcfirst reverse join split sprintf chomp chop chr ord lc |
| Listen | push pop shift unshift splice sort reverse map grep wantarray scalar |
| Hashes | keys values each exists delete |
| Zahlen | abs int sqrt sin cos atan2 exp log hex oct rand srand |
| Dateien | open close print printf eof binmode unlink rename mkdir opendir readdir |
| System | system exec fork wait kill sleep time localtime gmtime exit die warn |
Reguläre Ausdrücke
$s =~ /muster/flags $s =~ s/alt/neu/flags $s =~ tr/a-z/A-Z/
Flags: i g m s x e r Gruppen: (…) (?:…) (?<name>…) Zugriff: $1 $2 $+{name} $& $` $'
\d \w \s \b . ^ $ * + ? {n,m} [abc] [^abc] a|b nicht gierig: *? +? ??Spezialvariablen
| Variable | Bedeutung |
|---|---|
$_ | Standardvariable |
@_ | Argumente einer Subroutine |
$0 | Skriptname |
@ARGV, %ENV | Kommandozeilenargumente, Umgebung |
$! | Fehlertext des Systems |
$@ | Fehler aus eval |
$. | Zeilennummer der letzten Eingabe |
$, $" $/ $\ | Trennzeichen (Ausgabe, Liste, Eingabe, Zeilenende) |
$a, $b | in sort |
Einzeiler
perl -ne 'print if /fehler/i' log.txt # grep
perl -pe 's/alt/neu/g' datei # sed
perl -pi -e 's/alt/neu/g' *.txt # direkt in Dateien ersetzen
perl -lane 'print $F[2]' datei # dritte Spalte (awk)
perl -F: -lane 'print $F[0]' /etc/passwd # anderes Trennzeichen
perl -ne '$s += $_; END { print "$s\n" }' zahlen.txt # Summe
perl -le 'print for reverse 1..5'
perl -MList::Util=max -le 'print max(3, 9, 4)'
perl -0777 -ne 'print length' datei # Zeichen zählenHäufige Fehler
| Meldung / Problem | Ursache |
|---|---|
Global symbol "$x" requires explicit package name | Variable ohne my deklariert (strict) |
Use of uninitialized value | undef in Rechnung oder Text |
Can't locate Modul.pm in @INC | Modul nicht installiert: cpanm Modul |
Can't call method "x" on an undefined value | Objekt ist undef (Fehler vorher prüfen) |
Can't use string as a HASH ref | Referenz erwartet, Text bekommen |
== auf Texten | eq benutzen |
| Hash-Reihenfolge wechselt | immer sort keys %h |
Odd number of elements in hash assignment | ungerade Anzahl Werte |
| Datei nicht gefunden | or die "...: $!" zeigt den Grund |
Weiterlernen
- Dokumentation:
perldoc perlintro,perldoc perlfunc, perldoc.perl.org - Bücher: Learning Perl ("Das Lama"), Modern Perl (kostenlos online)
- Übungen: Rosetta Code, Exercism (Perl-Track), PerlMonks (Forum)
- Webentwicklung: Mojolicious, Dancer2
Merke
use strict; use warnings;undmyimmer- Kontext (Liste vs. Skalar) verstehen,
eqfür Text,==für Zahlen - Reguläre Ausdrücke und Einzeiler sind Perls Stärke
- Module von CPAN, Tests mit
Test::More