रकु में `s ///` को जोड़ना

Nov 30 2020

मुझे लगता है कि नशेड़ी को राकू में शामिल करने के लिए स्क्रिप्टिंग के लिए एक बड़ा विक्रय बिंदु इस तरह के निर्माण संभव होगा

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

अब तक के कुछ बेहतरीन जवाब (टिप्पणियों सहित)।

S///कई (क्रमिक) प्रतिस्थापन करते समय रकु के गैर-विनाशकारी ऑपरेटर का उपयोग करना अक्सर उपयोगी होता है। रकु आरपीएल में:

> 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

इस विचार को थोड़ा आगे बढ़ाते हुए, मैंने निम्नलिखित 'बेबी राकू' अनुवाद स्क्रिप्ट लिखी और इसे सहेजा 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