2010-08-10 13 views
10

में किसी YAML कॉन्फ़िगरेशन फ़ाइल से डेटा का उपयोग करने का सरल उदाहरण मुझे पर्ल स्क्रिप्ट के लिए कुछ कॉन्फ़िगरेशन डेटा स्टोर करने के लिए एक YAML फ़ाइल बनाने की आवश्यकता है। ऐसा लगता है कि यह वास्तव में आसान होना चाहिए लेकिन मैं इसे काम करने में सक्षम नहीं हूं, मुझे लगता है कि अगर मेरे पास कॉपी करने के लिए सिर्फ एक साधारण उदाहरण था तो मैं ठीक हूं। मैं ऐसा कुछ करना चाहता हूं:पर्ल स्क्रिप्ट

-----test.yaml----- 
image_width: 500 
show_values: 0 
------------------- 

------test.perl------ 
use YAML; 

my (%settings) = Load('test.yaml'); 
print "The image width is", $settings{image_width}; 
--------------------- 

उत्तर

7

अपनी इच्छित कॉन्फ़िगरेशन को डंप करने का प्रयास करें।

use strict; 
use warnings; 

use YAML; 

my %settings = (
     foo => 1, 
     bar => [qw/one two three/], 
); 

print Dump(\%settings); 

यह

--- 
bar: 
    - one 
    - two 
    - three 
foo: 1 

प्रिंट इसके अलावा, विकिपीडिया एक अच्छा overview of YAML है अगर विनिर्देश थोड़ा बहुत घना है।

+1

+1; मैं इसे कमांड लाइन से हर समय करता हूं: 'perl -MYAML :: Any -wle'my $ data = {यहां कुछ डेटा}; प्रिंट डंप ($ डेटा) '' आपके द्वारा किए गए परिवर्तनों को सत्यापित करने के लिए, आपके द्वारा किए गए किसी भी कॉन्फ़िगरेशन फ़ाइल को अनइमलाइज़ करना और इसके खिलाफ डेटा :: डूपर को कॉल करना भी एक अच्छा विचार है। – Ether

+0

मैं वही काम करता हूं। प्रारंभिक फ़ाइल को इस तरह से सही करने के लिए मेरे लिए बहुत आसान है अगर मैं स्क्रैच से शुरू करता हूं। –

+1

हालांकि यह वाईएएमएल कॉन्फ़िगरेशन फ़ाइल बनाने का एक अच्छा तरीका है, लेकिन यह उसके कोड के साथ समस्या का समाधान नहीं करता है। उनका वाईएएमएल वास्तव में प्रयोग योग्य है; यह वह कोड है जो काम नहीं करता है। – cjm

16

इस प्रयास करें:

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

use YAML qw(LoadFile); 

my $settings = LoadFile('test.yaml'); 
say "The image width is ", $settings->{image_width}; 

- माइकल

+0

धन्यवाद! यह बिल्कुल सही है. – user416625

14

आपका बुनियादी समस्या है कि यहाँ Load एक स्ट्रिंग YAML, नहीं एक फ़ाइल नाम युक्त उम्मीद है। आप इसके बजाय LoadFile चाहते थे (जिसे डिफ़ॉल्ट रूप से निर्यात नहीं किया जाता है)। साथ ही, YAML के बजाय आपको YAML::XS का उपयोग करना चाहिए, क्योंकि यह बेहतर कार्यान्वयन है। (लेकिन वाईएएमएल एक साधारण कॉन्फ़िगरेशन फ़ाइल के लिए पर्याप्त होना चाहिए।)

दूसरी समस्या यह है कि LoadFile एक हैश संदर्भ लौटाएगा (ठीक है, यदि आपका वाईएएमएल हैश जैसा दिखता है, जैसा कि आपका करता है), एक सूची नहीं जिसका आप उपयोग कर सकते हैं एक हैश शुरू करने के लिए।

इस प्रयास करें:

use strict; 
use warnings; 
use YAML::XS qw(LoadFile); 

my $settings = LoadFile('test.yaml'); 

print "The image width is ", $settings->{image_width}; 

(आप ::XS नष्ट कर सकते हैं यदि आप नहीं करना चाहते हैं (या नहीं) YAML :: XS स्थापित कर सकते हैं प्रोग्राम कोई अन्य बदलाव के साथ काम करेंगे।।)

+2

कॉन्फ़िगरेशन फ़ाइलों के लिए मैं YAML :: छोटा पसंद करता हूं। –

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