2017-09-10 8 views
8

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

say for @ARGV || qw/one two three/; 
+0

'||' के स्थान पर उपयोग करने के लिए कोई एकल ऑपरेटर नहीं है जो वांछित काम करेगा। निकटतम मैं सोच सकता हूं '(@ARGV? @ARGV: qw (एक दो)) ' – zdim

+0

[संबंधित प्रश्न] (https://stackoverflow.com/q/16883923/133939) – Zaid

उत्तर

6

|| operator यह क्या

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

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

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

इसका मतलब यह है कि यह शॉर्ट सर्किट है कि: सही अभिव्यक्ति मूल्यांकन किया जाता है केवल अगर बाईं अभिव्यक्ति गलत है।

क्या C-Style Logical Or in perlop

अदिश या सूची संदर्भ में बाहर वर्तनी है सही संकार्य के लिए नीचे से प्रसारित अगर यह मूल्यांकन किया जाता है।

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

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

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

हो सकता है लेकिन वहाँ @ARGV से निपटने के लिए बेहतर और अधिक प्रणालीगत तरीके हैं।

+0

' @ARGV = @ARGV | | qw (एक दो तीन); ' – Zaid

+0

@Zaid https://eval.in/858898 –

+0

@Zaid' perl -wE '@ ary = qw (एक दो); के लिए कहें (@ary = @ary || 1..3) 'प्रिंट्स' 2 3' – zdim

0

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

@ARGV = qw[...] unless @ARGV; 
say for @ARGV; 
संबंधित मुद्दे