/ / पर्ल सरणी गलत तरीके से शुरू हुई - सरणी, perl

पर्ल सरणी गलत तरीके से शुरू हुई - सरणी, perl

बस पर्ल से शुरू करना, और मैंने इस कोड उदाहरण के लिए ब्रांड्स की गलत जोड़ी का उपयोग किया:

@arr = {"a", "b", "c"};
print "$_n" foreach @arr;

मेरा मतलब है, मैं निश्चित रूप से देख सकता हूं कि जब मैं इसे चलाता हूं तो यह क्या करता है, लेकिन मुझे नहीं लगता कि यह क्यों करता है। क्या यह सिंटैक्स त्रुटि के साथ बस विफल नहीं हो सकता है?

उत्तर:

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

आपने गलती से एक बनाया है अज्ञात हैश, जो एक हैश है जिसमें कोई पहचानकर्ता नहीं है और केवल संदर्भ द्वारा इसका उपयोग किया जाता है।

सरणी @arr एक तत्व पर सेट है जो उस हैश का संदर्भ है। उचित रूप से लिखा यह इस तरह दिखेगा

use strict;
use warnings;

my @arr = (
{
a => "b",
c => undef,
}
);

print "$_n" foreach @arr;

यही कारण है कि आपको आउटपुट मिला

HASH(0x3fd36c)

(या कुछ समान) क्योंकि इस प्रकार पर्ल एक स्ट्रिंग के रूप में हैश संदर्भ का प्रतिनिधित्व करेगा।

यदि आप प्रयोग करना चाहते हैं, तो आप उपयोग करके पहले हैश तत्व के मान को प्रिंट कर सकते हैं $arr[0] एक हैश संदर्भ के रूप में (सरणी में इंडेक्स शून्य पर केवल एक ही तत्व है) और कुंजी के साथ तत्व के मान को एक्सेस करना a साथ में print $arr[0]->{a}, "n".

ध्यान दें, क्योंकि हैश के पास दो मानों (कुंजी / मूल्य जोड़े का एक सेट) होना चाहिए, अपने कोड में हैश को जोड़कर चार मानों तक विस्तारित किया गया है undef अंत की ओर।

यह है महत्वपूर्ण जो आप जोड़ते हैं use strict तथा use warnings आपके द्वारा लिखे गए प्रत्येक पर्ल कार्यक्रम के शीर्ष पर। इस मामले में बाद वाले ने चेतावनी उठाई होगी

Odd number of elements in anonymous hash

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

यह आश्चर्यजनक हो सकता है कि पर्ल में सिंटैक्स त्रुटियों में कितनी चीजें हैं। इस मामले में, आपने एक अज्ञात हैश संदर्भ बनाने के लिए वाक्यविन्यास पर ठोकर खाई है: { LIST }। पर्ल को "कोष्ठक के उपयोग की आवश्यकता नहीं है (द () दयालु) एक सरणी शुरू करते समय1। Arrays स्केलर (सिंगल) मानों की ऑर्डर सूचियों को पकड़ते हैं और संदर्भ स्केलर होते हैं, इसलिए पर्ल खुशी से उस संदर्भ के साथ आपके सरणी को एकमात्र तत्व के रूप में प्रारंभ करता है।

यह आप नहीं है चाहता था, लेकिन यह पूरी तरह से मान्य पर्ल है।

The () ऑपरेटरों की वरीयता को ओवरराइड करें और इस प्रकार अभिव्यक्ति के व्यवहार को बदलता है । @a = (1, 2, 3) क्या आप "डी की उंमीद है, लेकिन @a = 1, 2, 3 माध्यम (@a = 1), 2, 3, तो यह केवल असाइन करता है 1 सेवा मेरे @a.


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

{ LIST } हैश निर्माता है । यह एक हैश बनाता है, का परिणाम प्रदान LIST इसे करने के लिए, और इसका एक संदर्भ देता है ।

my $h = {"a", "b", "c", "d"};
say $h->{a};  # b

एक हैश रेफरी की एक सूची सिर्फ किसी अंय सूची के रूप में के रूप में कानूनी है, तो नहीं, यह shouldn "टी एक वाक्यविंयास त्रुटि हो ।