Perl ersetzen von mehreren Saiten gleichzeitig
Gibt es eine Möglichkeit, zu ersetzen, die mehrere Zeichenfolgen in einem string?
Zum Beispiel habe ich den string hello world what a lovely day
und ich möchte Sie ersetzen what
und lovely
mit etwas anderes..
$sentence = "hello world what a lovely day";
@list = ("what", "lovely"); # strings to replace
@replist = ("its", "bad"); # strings to replace with
($val = $sentence) =~ "tr/@list/@replist/d";
print "$val\n"; # should print "hello world its a bad day"..
Irgendwelche Ideen, warum es nicht funktioniert?
Dank.
- Werden die Wörter immer in ganzen Wörtern oder gibt es Potenzial für Muster?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst
tr
funktioniert das nicht so; Fragen Sieperldoc perlop
für details, abertr
tut transliteration, und ist sehr Verschieden von substitution.Zu diesem Zweck wird ein richtiger Weg, Sie zu ersetzen wäre
Beachten Sie, dass "gleichzeitig" ändern wird eher schwierig, aber wir könnten es tun, zum Beispiel,
(Flucht notwendig werden kann, ersetzen von Zeichenfolgen mit Metazeichen, natürlich.)
Dies ist noch immer nur gleichzeitig in einem sehr losen Sinne des Wortes, aber es funktioniert für die meisten Zwecke, zu handeln, als ob die Substitutionen werden in einem Durchgang erledigt.
Außerdem ist es richtiger zu ersetzen
"what"
mit"it's"
eher als"its"
.Gut, vor allem funktioniert es nicht wie
tr///d
hat nichts zu tun mit Ihrer Anfrage (tr/abc/12/d
ersetzt a mit 1, b mit 2 und c entfernt). Auch, standardmäßig arrays nicht interpolieren in reguläre Ausdrücke in einer Weise, die nützlich für Ihre Aufgabe. Auch, ohne so etwas wie eine hash-lookup oder eine subroutine oder eine andere Logik, Sie können keine Entscheidungen treffen, die in der rechten Seite dess///
Betrieb.Antwort auf die Frage im Titel, die Sie durchführen können mehrere ersetzt gleichzeitig die-er, in der praktischen Nachfolge--auf diese Weise:
Etwas mehr machen wie das, was Sie hier versuchen:
Wenn Sie werden tun eine Menge von solchen Ersetzungen, 'compile' die regex erste:
EDIT:
Und zu erweitern auf meine Bemerkung über die array-interpolation, die Sie ändern können
$"
:Welche nicht die Dinge, die hier wirklich, obwohl es, wenn Sie bereits die Schlüssel in einem array: