Möchte man das Ausgabeformat einer Eingabe (im Folgenden die Datei themen.txt) beeinflussen hilft einem format
weiter.
Ausgabeformat
Dateien testen
Dateien können auf die unterschiedlichsten Sachen hin getestet werden. Dazu zählt insbesondere das Überprüfen, ob es diese Datei schon gibt (-e
), um ein Überschreiben zu verhindern. Außerdem kann man auch testen, ob eine Datei überhaupt lesbar (-r
) bzw. ausführbar (-x
) ist und wann sie das letzte mal geändert (-M
) wurde.
Eine Ausführliche Liste findet man hier. Und hier ein praktisches Beispiel:
Kontrollstrukturen II
Eine Ergänzung zu Kontrollstrukturen bzw. Schleifen, sind die Befehle last
, redo
und next
.
Bedingungen und Schleifen/Kontrollstrukturen
Um nur unter bestimmten Bedingungen Teile eines Perlskriptes zu aktivieren, verwendet man die folgenden Ausdrücke: if ... else, if ... elsif ...else, unless, while, until, for, foreach
. Hier einige Beispiele:
Subroutinen
Subroutinen rufen Anweisungen auf, die an einer anderen Stelle im Programm definiert werden. Dies geschieht meistens entweder am Ende oder am Anfang.
Subroutinen geben dabei immer ihren letzten Wert aus. Hier einige Beispiele für den Umgang mit Subroutinen:
Split und Join
Um eine Zeichenkette in einer Variablen aufzuteilen und sie in eine Liste bzw. ein Array einzufügen wird die Funktion split
verwendet. Im folgenden wird aus $a
immer @worte qw = ("Sahanya" "lernt" "PHP")
.
$a = "Sahanya-lernt-PHP";
entfernt Bindestriche
@worte = split (/-/,$a);
$a = "Sahanya lernt PHP";
entfernt Leerzeichen
#@worte = split (/\s+/,$a);
Arbeitet man mit der Standardvariable $_
und möchte dort Leerzeichen entfernen, geht das so:
$_ = "Sahanya lernt PHP";
@worte = split;
Umgekehrt kann man mit join
auch Werte aus Listen bzw. Arrays durch Trennzeichen in eine Skalarvariable schreiben:
@worte = qw (
Sahanya
lernt
PHP
);
$a = join (" ",@worte);
Also ist jetzt $a = "Sahanya lernt PHP"
Ersetzen
Das Ersetzen von einzelnen Zeichen oder auch Mustern habe ich ja schon vereinzelt angesprochen, hier jetzt einige Ergänzungen:
$_= "Sahanya lernt PHP";
#Sohanya lernt PHP (ersetzt wird nur das erste a)
s/a/o/;
print $_;
$_= "Sahanya lernt PHP";
#Sohonyo lernt PHP (es werden alle as ersetzt)
s/a/o/g;
print $_;
$_= "Sahanya lernt PHP";
#Sayanya lernt PHP (es werden alle hs ersetzt)
s/h/y/g;
print $_;
$_= "Sahanya lernt PHP";
#Sayanya lernt PyP (es werden alle hs ersetzt, egal ob groß oder klein)
s/h/y/gi;
print $_;
$_= "Sahanya lernt PHP";
#-Sahanya- -lernt- -PHP-
s/(\w+)/-$1-/g;
print $_;
Spezielle Variablen
Perl legt bestimmte Muster in Standard-Variablen ab, die sich allerdings immer wieder neu überschreiben.
Eingaben, die keiner speziellen Variablen zugeordnet werden, werden zu $_
.
Möchte man nur Teile einer Variable ausgeben, kann das so aussehen:
#!\usr\bin\perl -w
$_ = "Sahanya versucht PHP zu lernen";
/v.{3}ucht/;
print "$`\n";
Ausgabe: Sahanya (der Ausdruck vor dem gesuchten Wort)
print "$&\n";
Ausgabe: versucht (das gesuchte Wort)
print "$'\n";
Ausgabe: PHP zu lernen (der Ausdruck hinter dem gesuchten Wort)
Muster
Verschiedene Muster können auf unterschiedliche Weise verwendet werden, z.B. um Ersetzungen vorzunehmen oder aber auch um diese in einer bestehenen Skalarvariable zu finden bzw. zu sehen, ob das Muster paßt ( =~ m/muster/
) — m: match bzw. passen
Mit Arrays arbeiten
Nachdem Arrays hier vorgestellt wurden, jetzt einige praktische Beispiele:
chop und chomp
Der Befehl chop
entfernt das letzt Zeichen einer Skalarvariabel:
$a = "Sahanya";
# Sahany (letzter Buchstabe fehlt)
chop ($a);
chop ($a);
#Sahan (“)
Während der Befehl chomp
sich nur auf den Newline-Befehl \n
bezieht.
Eine Eingabeaufforderung mit <STDIN>
wird in der Regel mit chomp
beendet, um sicherzustellen, dass das Newline-Zeichen entfernt wird:
$eingabe = <STDIN>;
chomp $eingabe;
Das ganze geht aber auch kürzer:
chomp ($eingabe = <STDIN>);
Manchmal sollte bzw. muss man allerdings nach einer Eingabeaufforderung auch auf den chomp-Befehl verzichten, z. B. wenn man möchte, dass ein Wert in getrennten Zeilen untereinander ausgegeben wird.
Vergleichsoperatoren
Zahl | Zeichen | |
gleich (equal) | == | eq |
ungleich (not equal) | != | ne |
kleiner als (lesser than) | < | lt |
größer als (greater than) | > | gt |
kleiner oder gleich (less or equal) | <= | le |
größer oder gleich (greater or equal) | >= | ge |
Vergleichsoperatoren für Zahlen und Zeichenketten sollte man tunlichst nicht verwechseln, denn 5 ist kleiner als 20 >, aber
5 lt 20
ist nicht wahr, denn 2 kommt vor 5.
Operatoren für Zeichenketten
Ein Punkt hängt Zeichenketten aneinander, ein x gibt die Zeichenkette x-mal aus:
print "sahanya"."perun";
#sahanyaperun
print "sahanya"." "."perun";
#sahanya perun
print "sahanya" x 3;
#sahanyasahanyasahanya
print 5 x 3;
# 555
Setzt man Skalarvariablen bei der Aneinanderhängung von Zeichenketten ein, sieht das ganze so aus:
$a = "sahanya";
#sahanyaperun
$b = "perun";
$a = "$a"."$b";
print $a;
Kürzer geht die Aneinanderhängung von Zeichenketten auch so — anstatt der dritten Zeile im obigen Beispiel:
$a .= $b;
Operatoren für Zahlen
Um mit Zahlen zu rechnen kann man eigentlich seiner Intuition folgen Damit das auch immer funktioniert, hier die Operatoren:
Sonderzeichen
Gibt man in Perl Text innerhalb von doppelten Anführungszeichen ein, kann man zusätzliche Befehle durch die Abtrennung von einem Backslash anfügen:
Das einfachste Beispiel ist wohl "Hallo Welt\n"
Weitere Befehle sind …
Einfacher Umgang mit Dateien
Um eine vorher erstellte Datei einzulesen gibt man folgenden Code ein:
#!/usr/local/bin/perl -w
#öffnet dieses Datei oder Fehlermeldung
open (DATEILESEN,"test.txt") || die "geht nicht";
while (defined ($i = <DATEILESEN>)) {
#gibt solange etwas aus bis kein Text mehr da ist
print $i }
#schließt die Datei wieder
close (DATEILESEN);
Möchte man, dass der Text der test.txt in eine ander Datei (hier test1.txt) kopiert wird, geht das so:
#!/usr/bin/perl -w
#schreibt das gefundene in die neue Datei
open (DATEILESEN,"test.txt") || die "einlesen geht nicht";
open (DATEISCHREIBEN, "> test1.txt") || die "schreiben funktioniert nicht";
while (defined ($i = <DATEILESEN>)) {
print DATEISCHREIBEN $i }
close (DATEILESEN);
close (DATEISCHREIBEN) || die "Fehler beim Schließen\n";
Möchte man, dass der Text in einer Datei nicht überschrieben wird, sondern drangehängt wird, muss man dem Dateinamen zwei >
voranstellen.
Hash
Ein Hash ist ein Array mit assoziativen Elementen, d. h. diese stehen miteinander in Beziehung. Das einfachste Beispiel wäre eine Liste mit Namen und den dazugehörigen Paßworten.
%hash = qw (
sahanya passwort1
perun passwort2
);
Angesprochen werden einzelne Elemente so:
Array
Ein Array besteht aus mehreren Variablen und ist wie folgt aufgebaut:
@array = "Sahanya", "Perun"
oder einfacher
@array = (Sahanya Perun)
Möchte man auf einzelne Variablen zugreifen, so geht das mit einer sogenannten Indexreferenz:
$array[0]
— hier wird auf Sahanya zugegriffen
$array[1]
— hier wird auf Perun zugegriffen
Der Array kann auch als Indexreferenz zusammengefaßt werden und wird dann mit $array[$i]
angesprochen. Einzelne Elemente wären dann $i = 0
(Sahanya) bzw. $i = 1
(Perun).
„flexible” Skalarvariablen
Möchte man bei der Überprüfung von Skalarvariablen, die über die Eingabe $name = <STDIN>
erfolgt sind, z. B. bei der Frage nach einem Namen (hier für das Beispiel Sahanya) mehrere Varianten zulassen, so gibt es folgende Möglichkeiten:
Hilfe
Möchte man, dass Perl einem eine Fehlermeldung ausgibt, die Hinweise auf Ursachen liefert, muss man die Eingangszeile um “-w” erweitern, so dass sie dann folgendermaßen aussieht:
#!/usr/bin/perl -w
Hilfe zu einzelnen Befehlen erhält man, wenn man folgendes eintippt:
perldoc -f befehl
Perl Beine machen …
… oder wie bringe ich Perl-Skripte zum Laufen:
Also man braucht 3 Sachen:
1. Perl
2. einen lokalen Webserver, ich nutze Apache
3. einen Editor, ich nutze Proton (es geht aber auch mit einem normalen Texteditor wie notepad o. ä.)
ach ja und Geduld!
Perl – der Anfang
So, eine neue Kategorie geht online
Da ich aus beruflichen Gründen (aber auch aus privatem Interese) Perl lernen möchte, werde ich hier (wie immer in unregelmäßigen Abständen) meine Lernerfolge und -mißerfolge (davon wird es bestimmt einige geben) kundtun. Außerdem werde ich Links posten, die mir bei meiner Lernerei geholfen haben und vielleicht auch schon bald kleine Skripte bzw. Erläuterungen zu Begriffen aus der Perl-Sprache.
Zum Lernen benutz ich zur Zeit das Buch „Einführung in Perl” von Randal L. Schwartz und Tom Christiansen.
Zu allererst: „Perl” steht für Practical Extraction and Report Language oder auch für Pathologically Eclectic Rubbish Lister.
Freuen würde ich mich natürlich über Tipps und Kommentare von Profis bzw. anderen „Perl-Lernern”.
Themen:
Perl Beine machen
Hilfe
„flexible” Skalavariablen
Array
Hash
Einfacher Umgang mit Dateien
Sonderzeichen
Operatoren für Zahlen
Operatoren für Zeichenketten
Vergleichsoperatoren
chop und chomp
Mit Arrays arbeiten
Mit Hashs arbeiten
Muster
Spezielle Variablen
Ersetzen
Split und Join
Subroutinen
Bedingungen und Schleifen/Kontrollstrukturen
Kontrollstrukturen II
Dateien testen
Ausgabeformat
Mit Dateien und Ordnern arbeiten