
perl
Perl bietet viel bequeme Funktionen zur Bearbeitung von Zeichenketten. Die
mächtigsten davon sind die sogenannten "regular expressions" (kennen wir
schon ein wenig vom grep Befehl). Diesen regulären Ausdrücken wird
aber ein eigenes Kapitel gewidmet.
Hier behandeln wir nur die wichtigsten normalen Funktionen:
chomp($bla);
würde allfällige newline Zeichen am Ende des strings $bla entfernen.
Wird kein string angegeben so wird chomp auf die Variable $_ angewendet.
zum verketten von strings verwenden wir den + Operator:
$bla="a b" + " buh";
der operator .= hängt einen string an einen bestehenden an:
$bla .= " bäh";
obiges wäre also das selbe wie $bla = $bla . " bäh";
weiters kann perl strings in andere substituieren:
$bla="mein name ist $hase /n";
oft hat man Eingabezeilen die aus mehreren Feldern bestehen die durch ein
Zeichen getrennt sind die man aufteilen will
@bla=split(/:/);
würde den string aus $_ anhand der Doppelpunkte in einzelne Felder
zerteilen und diese nacheinander im arry @bla ablegen. Ein anderes Beispiel:
($x,@rest)=split(/,/,"Anna,Berta,Christa");
würde die string konstante anhand der Beistriche zerlegen. In der
Variablen $x steht dann "Anna" und im feld @rest sind 2 Einträge mit
Berta und Christa.
das Gegenteil von split ist join:
print join(";",$x,@rest),"";
würde die Elemente $x und alle Felder aus @rest mit Strichpunkt getrennt
ausgeben.
$bla=substr("abcdef",2,3);
gibt 3 Zeichen aus dem string ab Position 2 zurück. in diesem Falle
"cde".
$länge=length("abc");
berechnet die länge eines strings. hier 3.
print lc($bla);
lc wandelt die zeichenkette in lowercase um, uc in upper case.
ganz allgemein gibt es den tr/// operator (translate).
$bla =~ tr /x/u/ ;
würde alle x durch ein u ersetzten. (=~ ist der substitutions operator)
$bla =~ tr/A-Z/a-z/ ;
würde alle Grossbuchstaben durch Kleinbuchstaben ersetzten. Hinter das
tr/// kann man noch einige Buchstaben schreiben die das Verhalten von tr
verändern:
s ersätzt mehrfache Vorkommnisse des selben Buchstabens durch
c heisst "complimentary" und dreht die Menge der zu ersetzenden Zeichen
um. d.h. der string enthält dann alle NICHT angeführten Zeichen.
d besagt: alle Zeichen löschen die nicht ersetzt wurden.
$bla =~ tr/a-z/*/s;
obiges ersetzt alle Kleinbuchstaben durch * wobei mehrere
hintereinandervorkommende Kleinbuchstaben durch nur einen * ersetzt
werden.
$bla =~ tr/a-z/*/c;
obiger ausdruck ersetzt alle Zeichen die keine Kleinbuchstaben sind durch
einen *.
$bla =~ tr/0-9//cd;
obiges würde alles das nicht eine Ziffer ist löschen
(complimentary und delete).
$bla =~ tr/0-9+-*\////cd;
dieser Ausdruch würde auch noch + - * und / im string übriglassen. Im
Suchmuster muss man hier ein \ vor die Sonderzeichen schreiben. Ansonsten
würde das ja als Bereichsangabe verstanden werden und das / als Ende
des Suchmusters interpretiert werden. Das \ vor dem Zeichen behebt die Spezialfunktion und sagt
dass wir wirklich dieses Zeichen meinen.
EXERCISES:
* schreibe ein Filter das von STDIN liest und alle Grossbuchstaben in
Kleinbuchstaben umwandelt.
* schreibe ein Filter das von STDIN liest und nur die darin enthaltenen
Ziffernfolgen ausgibt. Sind mehrere Ziffernfolgen in einer Zeile so
sollen diese durch einen Beistrich getrennt ausgegeben werden.
* schreibe ein Filter das, wenn man es mit cat /etc/passwd füttert, das
home-Verzeichnis aller user ausgibt. (Das homeverzeichnis ist das letzte
Feld im passwd file. Die Einträge im passwd file sind durch
Doppelpunkte getrennt.)
REFERENCES:
man perlop
man perlfunc
|