मैं इस तरह एक YAML दस्तावेज़ है:मैं पर्ल के वाईएएमएल :: छोटे के साथ एक वाईएएमएल पेड़ कैसे चला सकता हूं?
---
version: 1
rootdirectory:
- subdirectory:
- file1
- file2
- subdirectory2
है कि मैं एक YAML में लोड कर रहा हूँ :: इस तरह छोटे वस्तु:
$configuration = YAML::Tiny->read($configuration_file)
मैं पर्ल डीबगर के साथ स्क्रिप्ट लागू से देखते हैं कि क्या मैं अंत में नेस्टेड हैश और सरणियों कि YAML स्रोत की संरचना को प्रतिबिंबित का एक सेट है साथ:
0 YAML::Tiny=ARRAY(0x84e3ba4)
0 HASH(0x80627dc)
'rootdirectory' => ARRAY(0x84e3d3c)
0 HASH(0x84352b0)
'subdirectory' => ARRAY(0x84e3df0)
0 'file1'
1 'file2'
1 'subdirectory2'
'version' => 1
तो, मैं जनसंपर्क के बिना निम्नलिखित की तरह कर सकते हैं oblem:
print $configuration->[0]->{version}
और '1' के अपेक्षित उत्तर प्राप्त करें। इसी प्रकार, मैं यह भी कर सकता हूं:
print $configuration->[0]->{rootdirectory}->[0]->{subdirectory}->[0]
और 'file1' का अपेक्षित उत्तर प्राप्त करें।
मेरी समस्या उपरोक्त उदाहरण में मेरे फ़ाइल नाम प्राप्त करने की आवश्यकता वाले सभी प्राथमिक ज्ञान से आता है। चूंकि मैं वाईएएमएल कॉन्फ़िगरेशन में मनमाने ढंग से निर्देशिका संरचना का वर्णन करने के लिए अपनी स्क्रिप्ट के उपयोगकर्ताओं को अनुमति देने की कोशिश कर रहा हूं, यह पर्याप्त नहीं है। मुझे 'rootdirectory' से पेड़ को "चलने" में सक्षम होना चाहिए।
तो, मुझे लगता है मैं कुछ इस तरह किया जा सकता है कल्पना होगा:
print keys($configuration->[0])
जो मैं वापस आ गए जाने की उम्मीद है | 'rootdirectory, संस्करण' ... और इतने पर, सरणियों से अधिक पुनरावृत्ति और हैश जब तक मैं पेड़ चला गया था।
जब मैं ऊपर के उदाहरण को चलाने के लिए प्रयास करते हैं, मैं:
Type of arg 1 to keys must be hash (not array element)
इस बिंदु पर मैं अटक कर रहा हूँ। जैसा कि मैं इसे समझता हूं, $ कॉन्फ़िगरेशन -> [0], एक सरणी का तत्व होने के दौरान, एक हैश युक्त तत्व है जो मुझे विश्वास है कि मैं कुंजी के खिलाफ कार्य करने का प्रयास कर सकता हूं।
मुझे यहां क्या याद आ रही है?
उत्कृष्ट, धन्यवाद! जैसा कि मैं इसे समझता हूं, मुझे मूल रूप से% {$ कॉन्फ़िगरेशन -> [0]} के रूप में कुछ "वाक्य रचनात्मक चीनी" की आवश्यकता होती है ताकि पर्ल को यह विश्वास हो सके कि $ कॉन्फ़िगरेशन -> [0] वास्तव में हैश है और एक सरणी तत्व नहीं है यह एक हैश शामिल होता है। क्या यह एक उचित टिप्पणी है? –
हां –
कीवर्ड 'कुंजी()' को 'कुंजी (\%) {...}' जैसे परिभाषित किया गया है जो आपको हैश का उपयोग करने के लिए मजबूर करता है, लेकिन आपके लिए ऑटो-डिफरेंस नहीं करता है। –