<< 'm' = ~ m >> वाक्य रचना का अर्थ पर्ल में क्या है?


82

तो मैं समझता हूं कि पर्ल के पास बहुत अधिक असामान्य सिंटैक्स है, लेकिन मुझे काम पर एक कोड स्निपेट आया था कि दूसरे दिन जिसने मुझे भ्रमित कर दिया है। क्या कोई मुझे समझा सकता है कि इसका क्या मतलब है:

<<'m'=~m>>
print $a unless $b;
return;
m
;

यह HEREDOC वाक्य-विन्यास जैसा दिखता है, लेकिन किसी भी रूप में मैंने कभी नहीं देखा।



1
आप यहां पर्ल गुप्त ऑपरेटरों और स्थिरांक की एक सूची का उपयोग कर सकते हैं
aloisdg codidact.com

जवाबों:


124

इस गुप्त सिंटैक्स को अलंकृत डबल-ब्लेड तलवार के रूप में जाना जाता है , और इसे आमतौर पर निम्न के रूप में दर्शाया जाता है:

<<m=~m>>

Comments here

m
;

यह मल्टी-लाइन टिप्पणियों के लिए एक हैक है, जो कि हाइडरोक सिंटैक्स और मैच ऑपरेटर ( =~) >को सीमांकक के रूप में उपयोग करता है।

ध्यान दें, स्लैश के /रूप में, मिलान के लिए सीमांकक के रूप में उपयोग नहीं किया जा रहा है, 'एम' ऑपरेटर की आवश्यकता है। उदाहरण के लिए $my_var =~ /test/, इसके बराबर है $my_var =~ m>test>, जबकि $my_var =~ >test>अमान्य होगा।

इस तथ्य पर ध्यान दें कि mआपके स्निपेट में पहला चरित्र एकल उद्धरणों से घिरा हुआ है, जिसका अर्थ है कि चर $aऔर $bचर प्रक्षेपित नहीं होंगे। यदि इन उद्धरणों को छोड़ दिया गया था (मेरे प्रदान किए गए कोड उदाहरण के अनुसार) पर्ल स्वचालित रूप से अंतिम मार्कर में दोहरे उद्धरण जोड़ देगा और किसी भी बाद के चर को प्रक्षेपित किया जाएगा। यह समस्या पैदा करेगा अगर $aऔर $bअब परिभाषित नहीं हैं और आप उपयोग कर रहे हैं use warnings;

अलंकृत डबल-ब्लेड उदाहरण को समझने के लिए आसान बनाने के लिए (लेकिन अभी भी अनुशंसित नहीं है), हम लिख सकते हैं:

<<"END" =~ //

Comments here

END
;

ध्यान दें कि =~ //यह निरर्थक है, इसलिए यह इसके बराबर है:

<<"END";

Comments here

END

जो कि शून्य संदर्भ में मानक हर्डोक सिंटैक्स है।

मैं इसे उत्पादन कोड में उपयोग करने की सलाह नहीं दूंगा क्योंकि शून्य संदर्भ में एक स्ट्रिंग समस्या पैदा कर सकती है। इसके अलावा यह कोड सबसे अनुभवी पर्ल प्रोग्रामरों के लिए एक सिर खरोंच है और इसे पढ़ने और बनाए रखने के लिए व्यर्थ है! यदि आप उचित बहु-पंक्ति टिप्पणियाँ बनाना चाहते हैं, तो मैं यहाँ पोड से चिपके रहने का सुझाव दूंगा जैसा कि यहाँ बताया गया है कि मैं पर्ल में एक बहु-पंक्ति टिप्पणी कैसे दर्ज करूँ?

आशा है कि यह इसे साफ करता है।


24

रनिंग बी :: डिपार्स यह समझने में बहुत मदद करता है कि पर्ल उस कोड को कैसे संभाल रहा है (यह मानते हुए कि यह "test.pl" फ़ाइल में है):

perl -MO=Deparse  test.pl 

हमें दिखाओ:

"print \$a unless \$b;\nreturn;\n" =~ //;
test.pl syntax OK

इसलिए, जैसा कि आप देख सकते हैं, perl इस स्ट्रिंग में एक खाली rexxpr से मेल खाने की कोशिश कर रहा है: "print \$a unless \$b;\nreturn;\n"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.