Perl Programmierung - Grundkurs
der Datei. Die beiden Angaben sind die ersten Parameter, gefolgt von der Liste der Dateien, die geändert werden soll.
chown(1234, 567, "date.txt")
or die "date.txt: $!\n";
Eine Datei umbenennen
Man braucht dazu zwei Namen, den Alten und den Neuen.
rename "datei.txt", "neuer_name.txt"
or die "Kann die Datei nicht umbenennen: $!\n";
Eine Datei löschen
Sie löschen eine oder mehrere Dateien mit der Funktion unlink
unlink "/tmp/hilfsddatei"
or die "Kann Hilfsdatei nicht löschen: $!\n";
unlink glob(*.tmp);
Übung: Verzeichnis lesen
Schreiben Sie ein Programm, das alle Dateien anzeigt, die im aktuellen Verzeichnis lesbar sind. Dabei sollen die symbolischen Verzeichnisse . und .. nicht angezeigt werden. Schreiben Sie zwei Versionen, von denen eine mit readdir arbeitet, die andere mit der Funktion glob .
Lösung: Verzeichnis lesen
Hier ist zunächst die Lösung mit readdir .
#!/usr/bin/perl -w
use strict;
opendir VERZ, '.' or die "$!\n";
my @liste = readdir(VERZ);
closedir VERZ;
for my $f (@liste) {
next if $f eq '.' or $f eq '..';
print "$f\n" if -r $f;
}
Im Vergleich dazu ist die Lösung mittels Globbing doch etwas kürzer.
#!/usr/bin/perl -w
use strict;
my @liste = glob('* .*');
for my $f (@liste) {
next if $f eq '.' or $f eq '..';
print "$f\n" if -r $f;
}
Reguläre Muster/ reguläre Ausdrücke
Muster können einfacher Text, Datumsangaben oder beispielsweise HTML-Marken sein.
Nach einem Muster kann gesucht werden und der gefundene Inhalt auch durch neuen ersetzt werden.
Mit regulären Ausdrücken können diese Textmuster beschrieben, erkannt, und bearbeitet werden.
Textmuster werden für diesen Zweck in /-Zeichen eingeschlossen:
/hallo/
Mit Hilfe von Sonderzeichen, sogenannten Metazeichen, wird die Suche und Bearbeitung von Textmustern spezifiziert.
Das Pluszeichen bedeutet in einem Muster, dass das vorrangegende Zeichen einmal, zweimal oder auch beliebig oft vorkommen kann.
/a+/
(Ein Leerzeichen zwischen a und + stellt ein anderes Textmuster dar)
Wenn das Pluszeichen nicht nur für ein Zeichen gelten soll, müssen runde Klammern eingesetzt werden.
/(hallo)+/
Dieses Muster beschreibt unendlich viele, verschiedene Texte, nämlich alle, die mit Hallo beginnen, gefolgt von beliebig vielen weiteren Hallos.
Das folgende Programm zählt, wie oft das Wort hallo vorkommt:
my $no = 0;
while (< >) {
if (/hallo/) { ++$no; }
}
Wird der gesuchte Text gefunden, ist das Ergebnis true, sonst false.
Womit wird hier verglichen?
Bei dieser Eingabe würde in die Standardvariable $_ von Perl Text gespeichert und zm Vergleich benutzt.
Drei Zeichen, die zur Angabe von Häufigkeit benutzt werden:
- Das Pluszeichen + bedeutet beliebig oft, mindestens einmal
- Der Stern * bedeutet beliebig oft, eventuell aber auch gar nicht
- Ein Fragezeichen ? bedeutet einmal oder keinmal
All diese Angaben wirken auf das Zeichen unmittelbar zur Linken. Wenn das zu wenig ist, werden runde Klammern gesetzt.
Die Angabe von Grenzen. Um Anzugeben, das etwas mindestens dreimal und vorkommen soll, werden die Grenzen in geschweiften Klammern hinter das Muster gesetzt.
/a{3,5}/
Mindestens dreimal den Buchstaben a könnte verschieden dargestellt werden:
/a{3}/ oder /aaa/
Die untere Grenze kann nicht weggelassen werden.
Der Punkt als Metazeichen steht in einem regulären Ausdruck für ein beliebiges Zeichen ausser einem Zeilenende. Irgendeine Folge von Zeichen in einer Zeile sieht dann so aus:
/.+/
HTML-Marken erkennen
/<.+?>/
Position verankern
Es gibt auch die Möglichkeit, Positionen in einem String anzugeben. Ein Zeichen am Anfang einer Zeile finden mit dem ^-Zeichen.
Das Wort "Das" am Anfang eines Strings finden:
/^Das/
Das Karet ^ hat nur eine Sonderbedeutung, wenn es erstes Zeichen im Muster ist.
Das $-Zeichen symbolisiert das Zeilenende.
Weitere Zeichen für Anker
Anker
Bedeutung
\b
Passt auf eine Wortgrenze
\A
Passt nur auf den Anfang eines Strings
\Z
Passt auf das Ende eines Strings oder vor ein Zeilenende am Schluss
\z
Passt nur auf das Ende eines Strings
\G
Passt auf die Position des letzten
Weitere Kostenlose Bücher