Concatenare "s ///" in raku

Nov 30 2020

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

24 wamba Nov 30 2020 at 07:45

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/;
6 jubilatious1 Nov 30 2020 at 23:41

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