![ein Kapitel weiter](../weiter.gif)
Die zweite Möglichkeit der Änderung des Operators für die Musterfindung führt im
Gegensatz zum Kapitel zuvor, einen einfachen Erstatz von Zeichenfolgen durch eine andere Buchstabenfolge durch
. Hier der Syntax........
$string =~ tr/SuchListe/ErsatzListe/;
Ein einfaches Beispiel : Sie wollen alle Buchstaben einer Textdatei die sie als Kommandozeilenargument mit dem Programm gestartet haben in Großbuchstaben umwandeln.............
#!/usr/bin/perl -w
use strict;
undef $/;
my $text=<>;
if($text =~ tr/a-z/A-Z/) {
print $text , "\n";
}
In diesem Beispiel wird jedes einzelne Zeichen von der Suchliste durch eines der Zeichen
in ErsatzListe ersetzt.
Die Liste von Zeichen können sie auch wörtlich schreiben....
ABCDEF
A-F #ABCDEF
A-CX-Z #ABCXYZ
A-C0-9 #ABC0123456789
Hierzu noch ein paar Beispiele...
#!/usr/bin/perl -w
$text = "Dieser Text soll für Transliterationen missbraucht werden";
print $text , "\n";
$text =~ tr/a-z/A-Z/; #alles in Grossbuchstaben
print $text , "\n";
$_ = $text;
$anzahl_T = tr/T/T/; #Anzahl von dem Buchstaben T in $text
print "In diesem Text kommen $anzahl_T \"T\" 's vor!\n";
$anzahl_Space = tr/ / /; #Leerstellen in $text
print "In dem Text sind $anzahl_Space Leerstellen vorhanden\n";
An diesem Beispiel können wir auch erkennen das tr/// im Skalaren Kontex (ohne ~) die Anzahl
betroffener Zeichen zurückliefert. Vorrausgesetzt der Inhalt befindet sich in der Standartvariable $_
Natürlich können sie auch einzelne Zeichen löschen...
#!/usr/bin/perl -w
$text = "Dieser Text soll für Transliterationen missbraucht werden";
$text =~ tr/enl/ /; #Buchstaben e n und l entfernen
print $text , "\n";
Was aber tun bei folgender Angabe...
$text =~ tr/abcd/ABC/;
In diesem Fall werden alle Buchstaben "abcd" ersetzt duch "ABC". Aus "d" wird nun aber auch ein C. Um dies zu vermeiden gibt es das Flag /d das nichtersetzte Zeichen entfernt....
$text =~ tr/abcd/ABC/d;
Weitere Flags und Ihre Bedeutung wären...
- /s - Enstandene Duplikate aus der Ersetzung entfernen
- /d - Nichtersetzte Zeichen entfernen
- /UC - Konvertiert von Unicode nach Latin-1
- /CU
- Konvertiert von Latin-1 nach Unicode
Interessant dürfte es sein den Text von Latin-1 in Unicode und wieder zurück zu konvertieren.
Alle 255 darstellbaren Zeichen die es gibt können sie so angegeben...
\0-\xFF
Hier das Beispiel dazu...
#!/usr/bin/perl -w
$text = "Ein häßlicher Text für Konvertierungen : üäöß";
$text =~ tr/\0-\xFF//CU; #Latin1 -> Unicode
print $text , "\n";
$text =~ tr/\0-\x{FF}//UC; #Unicode -> Latin1
print $text , "\n";
Wichtig ist es zu erwähnen das das Ersetzen mit tr/// schneller geht als mit s/// was für Internetanwendungen
(CGI-Skripts) wichtig sein dürfte.
Fassen wir nochmals kurz zusammen.........
- $string =~ m/suchstring/; #Suchen von Schlüsselworten
- $string =~ s/suchstring/ersetztstring/; #Suchen und Ersetzten von Strings
- $string =~ tr/suchliste/ersetztliste/; #Ersatz für einzelne Zeichenfolgen
![ein Kapitel weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|