यदि कोई कमांड लाइन तर्क नहीं दिया जाता है तो नीचे सही ढंग से काम करता प्रतीत होता है, लेकिन जब वे सभी होते हैं तो मुझे दिए गए तर्कों की संख्या मिलती है, तर्क स्वयं नहीं। ऐसा प्रतीत होता है कि @ARGV
को ||
द्वारा जबरन अदिश किया जा रहा है। मैंने समान परिणामों के साथ or
और //
का उपयोग करने का भी प्रयास किया है। यहां उपयोग करने के लिए सही ऑपरेटर क्या है?
say for @ARGV || qw/one two three/;
2 जवाब
||
ऑपरेटर स्केलर लगाता है यह क्या करता है की प्रकृति से संदर्भ
बाइनरी
"or"
आस-पास के दो भावों का तार्किक संयोजन लौटाता है। यह बहुत कम प्राथमिकता को छोड़कर||
के बराबर है।
(जोर मेरा)। इस प्रकार जब इसका बायीं ओर का ऑपरेंड एक सरणी है तो इसे सरणी की लंबाई मिलती है।
हालांकि, अगर यह 0 है तो दाहिने हाथ की तरफ का मूल्यांकन किया जाता है
इसका मतलब है कि यह शॉर्ट-सर्किट है: दाएं अभिव्यक्ति का मूल्यांकन केवल तभी किया जाता है जब बाएं अभिव्यक्ति झूठी हो।
C-Style Logical or in perlop में क्या लिखा है
यदि इसका मूल्यांकन किया जाता है तो स्केलर या सूची संदर्भ सही ऑपरेंड तक फैलता है।
तो आपको उस मामले में सूची मिलती है।
ऐसा कोई ऑपरेटर नहीं है जो आपके कथन की इच्छा के अनुसार कार्य कर सके। निकटतम हो सकता है
say for (@ARGV ? @ARGV : qw(one two));
लेकिन @ARGV
से निपटने के लिए बेहतर और अधिक व्यवस्थित तरीके हैं।
बस इसे दो पंक्तियों के रूप में लिखें।
@ARGV = qw[...] unless @ARGV;
say for @ARGV;
संबंधित सवाल
नए सवाल
arrays
एक सरणी एक आदेशित रैखिक डेटा संरचना है जिसमें तत्वों (मूल्यों, चर, या संदर्भों) का एक संग्रह होता है, प्रत्येक को एक या अधिक अनुक्रमित द्वारा पहचाना जाता है। जब सरणियों के विशिष्ट प्रकारों के बारे में पूछा जाता है, तो इसके बजाय इन संबंधित टैगों का उपयोग करें: [वेक्टर], [सरणी सूची], [मैट्रिक्स]। इस टैग का उपयोग करते समय, एक सवाल जो प्रोग्रामिंग भाषा के लिए विशिष्ट होता है, उस प्रश्न को उस प्रोग्रामिंग भाषा के साथ टैग करें जिसका उपयोग किया जा रहा है।