/ / पर्ल में समेकित सरणी संख्याओं का उत्पादन क्यों करता है? - सरणी, perl, concatenation

पर्ल में समेकित सरणी संख्याओं का उत्पादन क्यों करती है? - सरणी, perl, concatenation

मैंने बस पर्ल में सरणी को संयोजित करने की कोशिश की + ऑपरेटर और अजीब परिणाम मिला:

perl -wE "say([1, 2, 3] + [4, 5, 6])"
73464360

हैश के साथ ऐसा करना एक वाक्यविन्यास त्रुटि प्रतीत होता है:

perl -wE "say({} + {})"
syntax error at -e line 1, near "} +"
Execution of -e aborted due to compilation errors.

पहली अभिव्यक्ति का नतीजा क्या है? क्या यह कहीं भी दस्तावेज है?

उत्तर:

उत्तर № 1 के लिए 7

यह संदर्भों की संख्या से है, जो संदर्भ के स्मृति पते का उत्पादन करता है।

perl -E "say @a; say 0+@a; printf "%xn",0+@a"

विशिष्ट आउटपुट (हालांकि जब भी आप प्रोग्राम चलाते हैं तो यह बदल सकता है)

ARRAY(0x1470518)
21431576
1470518      <--- same number as in first line

आपका हैश संदर्भ उदाहरण लगभग काम करता है, लेकिन ऐसा लगता है कि पर्ल पहले सेट को पार्स कर रहा है {} एक हैश संदर्भ के बजाय कोड ब्लॉक के रूप में ब्लॉक करता है। यदि आप एक यूनरी का उपयोग करते हैं + और पर्ल को इसे हैश संदर्भ के रूप में पेश करने के लिए मजबूर करता है, यह काम करेगा। मेरा मतलब है "काम"।

perl -E "say(+{} + {})"
40007168

जवाब के लिए 3 № 2

इसलिये + पर्ल में केवल एक अंकगणितीय ऑपरेटर है। यह अपने तर्कों को संख्याओं के रूप में व्याख्या करने के लिए मजबूर करता है, इससे कोई फर्क नहीं पड़ता। यही कारण है कि पर्ल के स्ट्रिंग कॉन्सटेनेशन के लिए एक अलग ऑपरेटर है (.)।

आप जो कर रहे हैं, प्रभावी ढंग से, उन पते को जोड़ रहा है जहां सरणी संग्रहीत की जाती हैं।

ऐरे कॉन्सटेनेशन केवल सरणी को सूचीबद्ध करके पूरा किया जाता है, एक दूसरे के बाद। हालांकि, अगर आप सरणी के संदर्भ का उपयोग कर रहे हैं ([...]), तो आपको पहले उन्हें अव्यवस्थित करना होगा @{...}:

perl -wE "say( @{[1,2,3]}, @{[4,5,6]} )"

लेकिन आम तौर पर आप सरणी चर का उपयोग करेंगे और अतिरिक्त वाक्यविन्यास की आवश्यकता नहीं है।

perl -wE "my @a = (1,2,3); my @b = (4,5,6); say join("-",@a,@b)"
#=> 1-2-3-4-5-6

एक ही चीज हैश के लिए जाती है; my %c = (%a,%b); की सामग्री गठबंधन करेंगे %a तथा %b (उस क्रम में, तो %bकिसी भी सामान्य कुंजी के लिए मान ओवरराइट होगा %a"एस) नए हैश में %c। आप उपयोग कर सकते हैं my $c = { %$a, %$b }; संदर्भों के साथ एक ही काम करने के लिए। एक गोचा, जिसे आप अपने अंदर चला रहे हैं + प्रयास, वह है {} खाली हैश की जगह कोड के खाली ब्लॉक के रूप में व्याख्या की जा सकती है।