2011-01-08 14 views
6

क्या एक नया स्ट्रिंग के बिना स्ट्रिंग के हिस्सों को प्रतिस्थापित करना संभव है?पर्ल स्ट्रिंग - एक नया चर बनाने के बिना अक्षर बदलें

अभी मैं इसे इस तरह कार्य करें:

$someString = "how do you do this"; 
$someString = s/how do/this is how/; 

मुझे क्या करना कोशिश कर रहा हूँ मूल स्ट्रिंग ($ someString) रखने के लिए और मूल स्ट्रिंग को संशोधित किए बिना कुछ वर्ण स्थानापन्न करने में सक्षम हो सकता है। मैं जावास्क्रिप्ट से अधिक परिचित हूं और मैं इसे एक चर बनाने/संशोधित किए बिना आपके कोड में ऐसा कर सकता हूं।

someString.replace(/how do/, "this is how") 

किसी भी मदद की सराहना की है, धन्यवाद बहुत

+1

की [पर्ल संभव डुप्लीकेट के रूप में लैम्ब्डा फोन (प्रतिस्थापित करें) और नई स्ट्रिंग वापस करें] (http://stackoverflow.com/questions/3440363/perl-use-s-replace-and-return-new-string) – daxim

उत्तर

11

नोट काफी यकीन है कि मैं सवाल को समझते हैं। यदि आप मूल स्ट्रिंग को अपरिवर्तित छोड़ना चाहते हैं, तो आपको एक नया चर बनाने की आवश्यकता है।

$newstring = $someString ; 
$newstring =~ s/how do/this is how/; 

ध्यान दें कि ऑपरेटर =~ नहीं =

अलावा मुझे लगता है मैं अब देखते हैं कि आप क्या चाहते है - बदली हुई स्ट्रिंग लौटाने के बजाय एक चर संशोधित करने के लिए। पर्ल 5.14 में ऐसा करने का एक तरीका होगा लेकिन मुझे वर्तमान में किसी तरीके से अवगत नहीं है। Use the /r substitution flag to work on a copy पर The Effective Perler पर देखें।

अद्यतन s///r functionallity कुछ समय के लिए जारी किया गया पर्ल में किया गया है। आप कर सकते हैं

use 5.14.0 ; 
my $someString = "how do you do this"; 
say ($someString =~ s/how do/this is how/r) ; 
+0

मुझे लगता है कि वह कुछ प्रिंट करना चाहता है जैसे कुछ प्रिंटिंग = ~ s/कैसे करें/यह कैसे है /; 'लेकिन कुछ $' String' स्पर्श किए बिना। – marcog

+0

नए/आर ध्वज का जिक्र करने पर अच्छा काम, मुझे लगता है कि स्मार्ट मैच ~~ –

+0

हाँ से पर्ल 5 के लिए एक बेहतर जोड़ा जा रहा है, मैं बस एक चर को संशोधित करने के बजाय बदली हुई स्ट्रिंग को वापस करने की तलाश में था। यह देखने के लिए अच्छा है जल्द ही सक्षम होने जा रहा है। –

0

तुम भी लैम्ब्डा उपयोग कर सकते हैं, यानी: उपयोग/s:

sub { local $_ = shift; s/how do/this is how/; $_ }->($someString) 

यह भी मामले में $_ को बरकरार रखता है आप उप { }->($_)

संबंधित मुद्दे