यदि कोई कमांड लाइन तर्क नहीं दिया जाता है तो नीचे सही ढंग से काम करता प्रतीत होता है, लेकिन जब वे सभी होते हैं तो मुझे दिए गए तर्कों की संख्या मिलती है, तर्क स्वयं नहीं। ऐसा प्रतीत होता है कि @ARGV को || द्वारा जबरन अदिश किया जा रहा है। मैंने समान परिणामों के साथ or और // का उपयोग करने का भी प्रयास किया है। यहां उपयोग करने के लिए सही ऑपरेटर क्या है?

say for @ARGV || qw/one two three/;
8
Pascal 10 सितंबर 2017, 07:55

2 जवाब

सबसे बढ़िया उत्तर

|| ऑपरेटर स्केलर लगाता है यह क्या करता है की प्रकृति से संदर्भ

बाइनरी "or" आस-पास के दो भावों का तार्किक संयोजन लौटाता है। यह बहुत कम प्राथमिकता को छोड़कर || के बराबर है।

(जोर मेरा)। इस प्रकार जब इसका बायीं ओर का ऑपरेंड एक सरणी है तो इसे सरणी की लंबाई मिलती है।

हालांकि, अगर यह 0 है तो दाहिने हाथ की तरफ का मूल्यांकन किया जाता है

इसका मतलब है कि यह शॉर्ट-सर्किट है: दाएं अभिव्यक्ति का मूल्यांकन केवल तभी किया जाता है जब बाएं अभिव्यक्ति झूठी हो।

C-Style Logical or in perlop में क्या लिखा है

यदि इसका मूल्यांकन किया जाता है तो स्केलर या सूची संदर्भ सही ऑपरेंड तक फैलता है।

तो आपको उस मामले में सूची मिलती है।

ऐसा कोई ऑपरेटर नहीं है जो आपके कथन की इच्छा के अनुसार कार्य कर सके। निकटतम हो सकता है

say for (@ARGV ? @ARGV : qw(one two));

लेकिन @ARGV से निपटने के लिए बेहतर और अधिक व्यवस्थित तरीके हैं।

7
zdim 24 सितंबर 2017, 08:54

बस इसे दो पंक्तियों के रूप में लिखें।

@ARGV = qw[...] unless @ARGV;
say for @ARGV;
0
Dave Cross 11 सितंबर 2017, 12:34