$string =~ s/$replace/ /g;
Könnten die Sonderzeichen zu dieser Fehlermeldung führen, wenn sie in $replace enthalten sind?
Ja, natürlich.
Du mußt also zunächst einmal Deinen Werte in "$replace" entsprechend escapen. Das machst Du dann am besten ebenfalls mit einem regulären Ausdruck.Aus dem Archiv-Suchskript dieses Servers:
# --------------------------------------------------------
# Sollen Metazeichen entwertet werden?
if (! $FORM {'meta'})
{
# ---------------------------------------------------
# Meta-Zeichen in ihre "entwerteten" Aequivalente verwandeln
# ---------------------------------------------------
# "" muss als erstes Zeichen ersetzt werden ...
$string =~ s/\/\\/g; # "" -> "\"
# ---------------------------------------------------
# ... der Rest geht tatsaechlich parallel
$string =~ s/([.^$()[/]{}*+?])/\$1/g; # "^" -> "^"
# (manchmal ist Perl wirklich *gnadenlos* kryptisch)
# ---------------------------------------------------
}
Warum einfach, wenns auch kompliziert geht ;-)
$replacenew = quotemeta( $replace );
alternative kann man auch in der RegExp angeben, das der folgende Stringteil gequotet werden soll:
$string =~ s/\Q$replace\E/ /g;
Jörk