आपको =~
काम करता है के बारे में एक गलतफहमी प्रतीत होती है। =~
एक बाध्यकारी ऑपरेटर है जो एक चर को एक regexp ऑपरेटर के साथ जोड़ता है। यह कोई असाइनमेंट नहीं करता है।
रेगेक्सपी ऑपरेटर सभी विषय परिवर्तनीय $_
के साथ डिफ़ॉल्ट रूप से काम करते हैं, इसलिए s/foo/bar/;
$_ =~ s/foo/bar/;
जैसा ही है। कोई असाइनमेंट नहीं होता है। विषय चर बदल गया है।
मामला किसी भी अन्य चर पर काम करते समय समान है। $var =~ s/foo/bar/;
foo
के पहले उदाहरण को bar
के साथ बदलकर $var
को बदलता है। कोई असाइनमेंट नहीं होता है।
सबसे अच्छी सलाह जो मैं आपको दे सकता हूं वह पर्ल में पायथन और पर्ल में पर्ल लिखना है। दो भाषाओं की अपेक्षा न करें।
आप ऐसा कर सकते हैं जैसे डीवीके सुझाव देता है और एक सबराउटिन लिखता है जो आपके द्वारा उपयोग किए जाने वाले प्रतिस्थापन व्यवहार को पुन: पेश करेगा।
या आप कुछ बेवकूफ पर्ल कोशिश कर सकते हैं।एक पंक्ति में कई परिवर्तनों को लागू करने की आपकी व्यक्त इच्छा के आधार पर, मैंने कुछ उदाहरण प्रदान किए हैं जो आपको उपयोगी लग सकते हैं।
यहाँ मैं $var
topicalize और कई हार्ड-कोडेड परिवर्तनों को लागू करने के एक आइटम पर एक for
पाश का उपयोग करें:
for($var) {
s/foo/bar/;
s/fizz/buzz/;
s/whop/bop-a-loo-bop/;
s/parkay/butter/;
s/cow/burger/;
}
या शायद आप रूपांतरण के एक चर समूह आवेदन करना होगा। मैं पुराने/नए परिवर्तन जोड़े को परिभाषित करने वाले सरणी संदर्भों की एक सूची पर लूप को एक सबराउटिन परिभाषित करता हूं। यह उदाहरण किसी भी प्रकार के परिवर्तनों को संभालने के लिए पर्ल की सूची उन्मुख तर्क प्रसंस्करण का लाभ उठाता है।
my $foo = transform(
'abcd' =>
[ 'a', 'b' ],
[ 'bb', 'c' ],
[ 'cc', 'd' ],
[ 'dd', 'DONE' ],
);
sub transform {
my $var = shift;
for (@_) {
my ($old, $new) = @$_;
$var =~ s/$old/$new/;
}
return $var;
}
अंत के बारे में परिणत कि इसके पहले तर्क को संशोधित करता है एक संस्करण प्रदान करने के लिए खिलवाड़ का एक सा: मैं शायद पहले दो के आधार पर किसी एक विकल्प का प्रयोग करेंगे मेरी अपनी परियोजना के लिए
my $foo = 'abcd';
transform_in_place(
$foo =>
[ 'a', 'b' ],
[ 'bb', 'c' ],
[ 'cc', 'd' ],
[ 'dd', 'DONE' ],
);
print "$foo\n";
sub transform_in_place {
for my $i (1..$#_) {
my ($old, $new) = @{$_[$i]};
$_[0] =~ s/$old/$new/;
}
}
विशेष समस्या की जरूरत है।
आपका उदाहरण दोनों '$ oldstring सेट हो जाएगा कोशिश कर रहा से जानने के लिए पर्ल खरोंच से क्या करता है कोशिश कर रहे हैं 'और' $ newstring 'संशोधित पाठ में। क्या आपका मतलब प्रतिस्थापन से पहले असाइनमेंट करना था और फिर '$ newstring' पर प्रतिस्थापन करना था? – mob