[Perl] Stringersetzung mit s///g

7H3 N4C3R

Lt. Commander
Registriert
Feb. 2002
Beiträge
1.816
Hi,

ich will in Perl in einem Text Strings durch andere ersetzen.

Naiv gedacht würde das so gehen:
Code:
$text =~ s/$string/$replacement/g;

Das geht genau solange bis ein Metazeichen in $string oder der Quoting-Char der Pattern-Substitution in $string oder $replacement auftritt.

Diese Fälle treten bei mir relativ häufig auf (es geht dadrum Zeichenketten LaTeX-tauglich zu machen). Nun habe ich den Modifier \Q \E gefunden, der zumindest etwas weiterhilft, aber das Problem nur etwas abschwächt und nicht löst:
Code:
$text =~ s/\Q$string\E/$replacement/g;

Wenn \E in $string auftritt (...und das tut es), habe ich wieder die A-Karte gezogen.

Gibt es eine Möglichkeit, dem s/// dieses Verhalten zuverlässig und allgemein abzugewöhnen?


Die Alternative wäre, $string mittels einer Funktion zu quoten (was mich dann immernoch nicht vor dem Auftreten des Quoting-Zeichens schützt). Aber wenn ich diese Funktion selber schreiben muss, kann ich die Ersetzung auch gleich händisch programmieren, dann weiß ich wenigstens, dass sie funktioniert. Hätte nur gerne Perl-Sprachmittel dafür benutzt - ich hoffe ja noch, dass es sowas gibt.
 
Zurück
Oben