ABSTRACT: perl: funktionen und operationen zur stringverarbeitung (splilt, join, substr, + , tr ...) werden vorgestellt. AUDIENCE: perl beginners SYSTEM: any unix SECTION: perl AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt perl biete viel bequeme funktionen zur bearbeitung von zeichenketten. die maechtigsten davon sind die sogenannten "regular expressions" (kennen wir schon einwenig vom grep befehl). die will ich aber lieber in einem eigenen kaptiel erklaern. heute behandeln wir nur die wichtigsten normalen funktionen: chomp($bla); wuerde allfaellige newline \n 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 .= haengt eine string an einen bestehenden an: $bla .= " baeh"; obiges waere also das selbe wie $bla = $bla . " baeh"; 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(/:/); wuerde den string aus $_ anhand der doppelpunkte in einzelen felder zerteilen und diese nacheinander im arry @bla ablegen. oder: ($x,@rest)=split(/,/,"anna,berta,christa"); wuerde die string konstante anhand der beistriche zerlgen. in der variablen $x steht dann "anna" und im feld @rest sind 2 eintraege bit berta und christa. das gegenteil von split ist join: print join(";",$x,@rest),"\n"; wuerde 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 zurueck. in diesem falle "cde". $laenge=length("abc"); berechnet die laenge eines strings. hier 3. print lc($bla); lc wandelt die zeichenkette in lowercase um. (analog uc). ganz allgemein gibt es den tr/// operator. $bla =~ tr /x/u/ ; wuerde alle x durch ein u ersetzten. (=~ ist der substitutions operator) $bla =~ tr/A-Z/a-z/ ; wuerde alle grosbuchstaben durch kleinbuchstaben ersetzten. hinter das tr/// kann man noch einige buchstaben schreiben die das verhalten von tr veraendern. s ersaetzt mehrfache vorkommnisse des selben buchstabens durch c heisst "complimentary" und dreht die menge der zu ersetzenden zeichen um. d.h. der string enthaelt dann alle NICHT angefuehrten zeichen. d besagt: alle zeichen loeschen 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 ausdruch ersetzt alle zeichen die keine kleinbuchstaben sind durch einen *. $bla =~ tr/0-9//cd; obiges wuerde alles was keine ziffer ist loeschen. $bla =~ tr/0-9\+\-\*\///cd; dieser ausdruch wuerde auch noch + - * und / im string uebriglassen. im suchmuster muss man hier ein \ vor die sonderzeichen schreiben. ansonsten wuerde das - ja als bereichsangabe versanden werden und das / als ende des suchmuster. 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 grosbuchstaben 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 fuettert das homeverzeichniss aller user ausgibt. (das homeverzeichnis ist das letzte feld im passwd file. die eintraege im passwd file sind durch doppelpunkte getrennt.) REFERENCES: man perlop man perlfunc