2009-06-03 21 views
14

पर्ल में, ' और " के बीच क्या अंतर है?पर्ल में सिंगल और डबल कोट्स के बीच क्या अंतर है?

उदाहरण के लिए, मैं 2 चर नीचे की तरह है:

$var1 = '\('; 
$var2 = "\("; 

$res1 = ($matchStr =~ m/$var1/); 
$res2 = ($matchStr =~ m/$var2/); 

$res2 बयान है कि Unmatched (before HERE mark in regex m शिकायत।

उत्तर

31

डबल उद्धरण चर विस्तार का उपयोग करें। एकल उद्धरण चिह्न नहीं

करना एक में डबल उद्धृत स्ट्रिंग आपको कुछ वर्णों से बचने के लिए अलग-अलग व्याख्या करने के लिए जरूरी है। एक भी उद्धृत स्ट्रिंग में आप (एक बैकस्लैश के अलावा अगर यह स्ट्रिंग में अंतिम वर्ण है) नहीं है

my $var1 = 'Hello'; 

my $var2 = "$var1"; 
my $var3 = '$var1'; 

print $var2; 
print "\n"; 
print $var3; 
print "\n"; 

हो जाएगा ताकि उत्पादन

Hello 
$var1 

पर्ल भिक्षु इस का एक बहुत अच्छी व्याख्या है here

+0

आप कहना है कि झुलसाना बोली में '\\ (' 1 चरित्र के होते हैं और दोहरे उद्धरण में "\\ (" 2 वर्ण हैं? – chappar

+6

नहीं, यह विपरीत है। '\\ (मतलब अंतर्वेशन '2 वर्ण है, और "\\ (" एक है। –

+1

सीमांकक चरित्र भी backslashed किया जाना चाहिए, और विभिन्न अन्य मामलों में बैकस्लैश के अलावा स्ट्रिंग के अंतिम चरित्र के रूप में (जैसे दो चरित्र स्ट्रिंग \' है '\\\ '', नहीं '\\' ') – ysth

3

डबल उद्धरण चिह्नों की व्याख्या, और एकल उद्धरण

+0

विचार सही है, लेकिन आप 42isanumber को चर नाम के रूप में उपयोग नहीं कर सकते हैं। –

4

है 'चर का समाधान नहीं होगा नहीं और निकल जाता है

"चर का समाधान हो जाएगा, और वर्ण से बचें।

आप अपने \ चरित्र संग्रहीत करना चाहते हैं $ var2 में स्ट्रिंग में, का उपयोग "\\ ("

+3

एस/संकल्प// –

1

"" चर प्रक्षेप और भागने का समर्थन करता है। इसलिए "\("\ पलायन (

कहाँ के रूप में 'अंदर' या तो समर्थन नहीं करता। इसलिए '\(' सचमुच है \(

2

पर्ल एकल उद्धृत तार लेता है 'जैसी है' और डबल-कोटेड तार interpolates। साधन अमान्य तरीके से, कि यह चर वैल्यू के साथ वैरिएबल को प्रतिस्थापित करता है, और बच निकले वर्णों को भी समझता है। इसलिए, आपका "\" "(',' और आपका रेगेक्सपी एम/(/, है, यही कारण है कि पर्ल शिकायत करता है।

+0

एकल उद्धरण तारों में यह दो भागने वाले पात्रों को पहचानता है: अंतिम डेलीमीटर चरित्र और \। – ysth

2

यदि आप हैं रेगेक्स तार बनाने के लिए आपको वास्तव में qr// quote-like operator का उपयोग करना चाहिए:

my $matchStr = "("; 
my $var1 = qr/\(/; 
my $res1 = ($matchStr =~ m/$var1/); 

यह एक संकलित regex है कि सिर्फ एक चर स्ट्रिंग वाली का उपयोग करने से बहुत तेजी से बनाता है। यदि रीगेक्स संदर्भ में उपयोग नहीं किया जाता है, तो यह एक स्ट्रिंग भी लौटाएगा, ताकि आप

print "$var1\n"; #prints (?-xism:\() 
+0

ओपी क्वाटेलिक ऑपरेटरों पर पर्लप अनुभागों को पढ़ना चाह सकता है: http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators – daotoad

+1

@daotoad आप उत्तर में दिए गए लिंक की तरह हैं? –

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

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