2013-10-12 3 views
5

निम्नलिखित पर्ल में झलकी:मैं इस उपचार को एक संदर्भ के रूप में क्यों मुद्रित कर सकता हूं और इसे स्केलर के रूप में पेश कर सकता हूं?

my $a1 = [ qw(rock pop musical) ]; 
my $b1 = [ qw(mystery action drama)]; 
my $c1 = [ qw(biography novel periodical)]; 

my @a2d = ( 
    $a1, 
    $b1, 
    $c1 
); 

@a2d एक सरणी जो सरणियों के संदर्भ हो सकता है।
मेरा प्रश्न है क्यों निम्नलिखित प्रिंट एक ही बात (musical) ?:

print ${$a2d[0]}[2],"\n"; 
print $a2d[0][2],"\n"; 

मैं दूसरे की उम्मीद ARRAY मुद्रित करने के लिए या एक त्रुटि देने के बाद से सरणी के तत्वों refences

उत्तर

9

हैं भिन्नता है जब आप इंडेक्स पर काम करते हैं तो अंतर्निहित।

$a2d[0][2] 

के लिए

${ $a2d[0] }[2] 

उर्फ ​​

$a2d[0]->[2] 

बल्कि एक सिंटैक्स त्रुटि देने से, पर्ल एक आम आपरेशन के लिए एक उपयोगी शॉर्टकट प्रदान करता है कम है।

अन्य उदाहरण: $aoa[$i][$j], $aoh[$i]{$k}, $hoa{$k}[$i] और $hoh{$k1}{$k2}

10

$a2d[0] एक सरणी संदर्भ है। हम इस सरणी संदर्भ को ले सकते हैं और तीसरी प्रविष्टि को प्रिंट कर सकते हैं:

my $ref = $a2d[0]; 
say ${ $ref }[2]; 
say $ref->[2]; 

ये फॉर्म समकक्ष हैं। अब, हम है कि मध्यवर्ती चर को दूर कर सकते हैं, और मिलती है: भिन्नता ऑपरेटर -> दो सबस्क्रिप्ट के बीच होता है

say ${ $a2d[0] }[2]; 
say $a2d[0]->[2]; 

है, तो यह एक शॉर्टकट के रूप छोड़ा जा सकता है:

say $a2d[0][2]; 

तीर सकता है बाएं सबस्क्रिप्ट [...] या {...} और दाएं सबस्क्रिप्ट [...], {...} या (...) पर छोड़कर छोड़ा जाए।

यह perlreftut में भी समझाया गया है, जो इन विचारों के माध्यम से अधिक गहराई में जाता है। पढ़ना कि दस्तावेज़ को कई प्रश्नों को साफ़ करना चाहिए।

संबंधित मुद्दे

 संबंधित मुद्दे