Concatenare "s ///" in raku
Trovo che un enorme punto di forza per gli appassionati di scripting che si uniscono al raku sarebbe avere tali costrutti possibili
my $w = "Hello world"; $w
~~ s/Hello/Hola/
~~ s/world/mundo/
;
say $w; # » Hola world
Tuttavia non mi sembra di essere in grado di scrivere qualcosa del genere. Per quanto ne so, farlo con il .substmetodo Strsarebbe troppo brutto, e questo concatenamento s///o anche tr///fondamentalmente sarebbe un farmaco di passaggio per gli sedutenti, ecc.
La mia domanda è se mi manchi qualcosa, se qualcosa di lontanamente simile a questo è possibile in qualche modo in raku. Non sono un principiante e non sono riuscito a capirlo.
Risposte
Potresti usare withogiven
with $w {
s/Hello/Hola/;
s/world/mundo/;
}
andthen
$w andthen s/Hello/Hola/ && s/world/mundo/;
o questa brutta costruzione
$_ := $w;
s/Hello/Hola/;
s/world/mundo/;
Finora alcune ottime risposte (commenti compresi).
L'utilizzo S///dell'operatore non distruttivo di Raku è spesso utile quando si eseguono sostituzioni multiple (successive). Nella REPL Raku:
> my $w = "Hello world"; Hello world > given $w {S/Hello/Hola/ andthen S/world/mundo/};
Hola mundo
> say $w;
Hello world
Quando sei soddisfatto del tuo codice, puoi assegnare il risultato a una nuova variabile:
> my $a = do given $w {S/Hello/Hola/ andthen S/world/mundo/}; Hola mundo > say $a
Hola mundo
Portando questa idea un po 'oltre, ho scritto il seguente script di traduzione "baby Raku" e l'ho salvato come Bello_Gallico.p6. È divertente correre!
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