楽で `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
ユーザーなどのゲートウェイドラッグになるでしょう。
私の質問は、何かが足りないのか、これに似た何かがラクでどういうわけか可能かどうかです。私は初心者ではないので、理解できませんでした。
回答
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///
演算子を利用すると、複数の(連続した)置換を行うときに役立つことがよくあります。楽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