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:
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:
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.
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.