Verketten von `s ///` in Raku
Ich finde, dass ein großes Verkaufsargument für Skriptsüchtige, sich Raku anzuschließen, darin besteht, solche Konstrukte möglich zu machen
my $w = "Hello world"; $w
~~ s/Hello/Hola/
~~ s/world/mundo/
;
say $w; # » Hola world
Ich scheine jedoch nicht in der Lage zu sein, so etwas zu schreiben. Soweit ich weiß, wäre es zu hässlich, dies mit der .subst
Methode von Str
zu tun , und diese Verkettung von s///
oder sogar im tr///
Grunde wäre ein Gateway-Medikament für sed
Benutzer usw.
Meine Frage ist, ob mir etwas fehlt, ob etwas Ähnliches in Raku irgendwie möglich ist. Ich bin kein Anfänger und konnte es nicht herausfinden.
Antworten
Sie könnten withoder verwendengiven
with $w {
s/Hello/Hola/;
s/world/mundo/;
}
andthen
$w andthen s/Hello/Hola/ && s/world/mundo/;
oder diese hässliche Konstruktion
$_ := $w;
s/Hello/Hola/;
s/world/mundo/;
Einige ausgezeichnete Antworten (einschließlich Kommentare).
Die Verwendung des zerstörungsfreien S///
Operators von Raku ist häufig nützlich, wenn mehrere (aufeinanderfolgende) Ersetzungen durchgeführt werden. In der Raku REPL:
> my $w = "Hello world"; Hello world > given $w {S/Hello/Hola/ andthen S/world/mundo/};
Hola mundo
> say $w;
Hello world
Sobald Sie mit Ihrem Code zufrieden sind, können Sie das Ergebnis einer neuen Variablen zuweisen:
> my $a = do given $w {S/Hello/Hola/ andthen S/world/mundo/}; Hola mundo > say $a
Hola mundo
Um diese Idee ein wenig weiter zu verfolgen, schrieb ich das folgende 'Baby Raku'-Übersetzungsskript und speicherte es als Bello_Gallico.p6
. Es macht Spaß zu rennen!
my $caesar = "Gallia est omnis divisa in partes tres"; my $trans1 = do given $caesar { S/Gallia/Gaul/ andthen S/est/is/ andthen S/omnis/a_whole/ andthen S/divisa/divided/ andthen S/in/into/ andthen S/partes/parts/ andthen S/tres/three/ }; put $caesar;
put $trans1;
HTH.
https://docs.raku.org/language/regexes#S///_non-destructive_substitution