raku에서`s ///`연결

Nov 30 2020

스크립팅 중독자들이 raku에 가입 할 수있는 엄청난 판매 포인트는 이러한 구성이 가능하다는 것입니다.

my $w = "Hello world"; $w
  ~~ s/Hello/Hola/
  ~~ s/world/mundo/
  ;

say $w; # » Hola world

그러나 나는 이와 같은 것을 쓸 수없는 것 같다. 내가 아는 한 .subst방법으로 이것을하는 Str것은 너무 추악 할 것이며,이 체인 s///또는 심지어 tr///기본적으로 sed사용자 등을 위한 관문 약물이 될 것입니다 .

내 질문은 내가 뭔가를 놓치고 있는지, 이것과 원격으로 비슷한 것이 어떻게 든 raku에서 가능하다면입니다. 나는 초보자가 아니고 그것을 이해할 수 없었습니다.

답변

24 wamba Nov 30 2020 at 07:45

with또는 사용할 수 있습니다.given

with $w {
    s/Hello/Hola/;
    s/world/mundo/;
}

andthen

$w andthen  s/Hello/Hola/ && s/world/mundo/;

또는이 못생긴 건설

$_ := $w;
s/Hello/Hola/;
s/world/mundo/;
6 jubilatious1 Nov 30 2020 at 23:41

지금까지 몇 가지 훌륭한 답변 (댓글 포함).

Raku의 비파괴 S///연산자를 사용하면 여러 번 (연속적인) 대체를 수행 할 때 종종 유용합니다. Raku REPL에서 :

> my $w = "Hello world"; Hello world > given $w {S/Hello/Hola/ andthen S/world/mundo/};
Hola mundo
> say $w;
Hello world

코드가 마음에 들면 결과를 새 변수에 할당 할 수 있습니다.

> my $a = do given $w {S/Hello/Hola/ andthen S/world/mundo/}; Hola mundo > say $a
Hola mundo

이 아이디어를 조금 더 나아가서 다음의 'baby Raku'번역 스크립트를 작성하여 Bello_Gallico.p6. 달리는 것이 즐겁습니다!

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