Artikel im Internet unter http://www.hidemail.de/blog/die-transliteration---nur-ein-zeichen-in-einem-skalar-ersetzen.shtml.
Mittwoch, 2.12.2009, 13:05:22 Uhr

Die Transliteration - Nur ein Zeichen in einem Skalar ersetzen


Ich glaube, ich hatte dazu schon mal irgendwo in diesem Blog geschrieben, aber da ich das heute gerade mal brauchte und mich da etwas intensiver mit beschäftigt habe, möchte ich noch einen Artikel dazu schreiben.

Es ging um das Problem, nur ein Zeichen in einem Skalar zu löschen bzw. durch ein anderes zu ersetzen, und das natürlich möglichst schnell.

Also die "Wald und Wiesen-Variante" ist ja ein:

$skalar=~ s/a/b/g;


Leider ist das auch die rechenaufwändigste Variante, d.h. sie verbrät die meiste Rechenzeit.

Schneller ginge es schon mit index und substr, aber da das ein arges herumgewurschtel ist und nicht die schnellste Variante, möchte ich mir hier die Erläuterung sparen.

Also kam ich mal wieder auf die Variante

$skalar=~ tr/a/b/;


Dies scheint tatsächlich die schnellste Variante zu sein.
Sie ist der RegEx mit ~ s ja sehr ähnlich, tatsächlich wird aber laut Dokumentation die große mächtige RegEx-Maschinerie gar nicht verwendet, was sie wohl so schnell macht.

Und das ~ tr hat auch noch einige Parameter, die man sinnvoll einsetzen kann:

Wenn es also um das Löschen eines bestimmten Zeichens geht, so sollte man unbedingt die Variante

$skalar=~ tr/a//d;


wählen, weil sie besonders schnell ist.

Mehrere Zeichen ersetzen mit tr
Natürlich kann das tr auch mehrere verschiedene Zeichen ersetzen.
Beispiel:

$skalar=~ tr/ae/io/;


Dies würde jedes a mit einem i und jedes e mit einem o ersetzen.


Und schließlich kann das tr noch etwas: Zählen!
Wenn man etwa wissen möchte, wie oft der Buchstabe a in einem Skalar vorkommt, kann man z.B.:

$anzahl=$skalar=~ tr/a/a/;


Wichtig ist aber zu beachten, daß hier zwischen Groß- und Kleinschreibung unterschieden wird, anders als in einer RegEx, bei der man bei Bedarf ein /i hinten anstellen kann.


Artikel im Internet unter http://www.hidemail.de/blog/die-transliteration---nur-ein-zeichen-in-einem-skalar-ersetzen.shtml.