2012-03-13 18 views
10

पर्ल में मुझे एक विशाल हैश का विश्लेषण करने की आवश्यकता है, इसलिए मैं इसे Data::Dumper मॉड्यूल का उपयोग करके फ़ाइल में प्रिंट करता हूं। क्योंकि यह एक बड़ी फाइल है, इसे पढ़ना बहुत मुश्किल है। क्या यह किसी भी तरह से Dumper आउटपुट को अच्छी तरह मुद्रित करना संभव है, इसलिए जब मुझे एक स्ट्रिंग मिल जाएगी जो मैं ढूंढ रहा हूं, तो मैं तुरंत उस महत्वपूर्ण संरचना को देख पाऊंगा जहां मैं जिस स्ट्रिंग को ढूंढ रहा हूं उसे संग्रहीत किया जाता है?पर्ल हैश डेटा :: डम्पर

  use Data::Dumper; 
      ... 
      print Dumper $var; 

सबसे अच्छा वाक्य रचना या वैकल्पिक अच्छा उत्पादन प्राप्त करने के लिए क्या है:

वर्तमान में मैं सिर्फ एक सरल कोड का उपयोग कर रहा हूँ?

+2

आपको प्राप्त होने वाले आउटपुट का उदाहरण क्यों न दें, और आउटपुट जो आप चाहते हैं? डम्पर आउटपुट डिफ़ॉल्ट रूप से स्वरूपित होता है ताकि आप आसानी से मुख्य संरचना देख सकें, तो आप और क्या खोज रहे हैं? – TLP

+2

-1 आप गलत सवाल पूछ रहे हैं। डंप एक विशाल intertwined वस्तु है। सवाल यह होना चाहिए कि उचित एपीआई कॉल आपके इच्छित डेटा को प्राप्त करने के लिए हैं, न कि कैसे [डंप को सुंदर बनाना] (http://p3rl.org/perltidy)। – daxim

उत्तर

20

मैं लगभग हमेशा

$Data::Dumper::Indent = 1; 
$Data::Dumper::Sortkeys = 1; 

सेट Data::Dumper साथ। पहला बयान आउटपुट को अधिक कॉम्पैक्ट बनाता है और अधिक डेटा पठनीय होता है जब आपकी डेटा संरचना कई स्तरों की गहराई होती है। दूसरा बयान भी

$Data::Dumper::Useqq = 1; 

पर विचार डेटा संरचना बाइनरी डेटा या एम्बेडेड टैब/नई-पंक्तियों, शामिल है, तो यह आसान उत्पादन स्कैन और जल्दी चाबियाँ आप सबसे में रुचि रखते हैं खोजने के लिए बनाता है।

जो उत्पादन होगा उस डेटा के लिए एक उपयुक्त पठनीय प्रतिनिधित्व।

perldoc में और भी बहुत कुछ।

+0

हां, यह थोड़ा सा मदद करता है, धन्यवाद। –

+0

क्षमा करें, लेकिन मैं यह पूछने जा रहा हूं कि इस उत्तर के बारे में एक नौसिखिया सवाल क्या हो सकता है। यदि सख्त प्रगति प्रभावी है, तो क्या आपको उपर्युक्त बयान से पहले $ डेटा की कुछ तरह की घोषणा करना है? –

+0

नहीं आप नहीं करते हैं। '$ डेटा :: डम्पर :: इंडेंट' और' $ foo :: bar' "योग्य" चर नाम हैं (वे पैकेज के साथ-साथ चर नाम भी निर्दिष्ट करते हैं) और 'सख्त' के तहत अनुमत हैं। – mob

-1

यह सवाल का उत्तर देता है।

my $WWW_Scripter_Plugin_JavaScript_JE = ${ $VAR1->[1]{156192192} }; 
my $JE_Object_String = ${ $WWW_Scripter_Plugin_JavaScript_JE->{pf}{String} }; 
my $JE_Object_Function = ${ $JE_Object_String->{props}{search} }; 
my $REF = ${ $JE_Object_Function->{global} }; 
my $HTML_DOM_Element_Img = $REF->{classes}{'HTML::DOM::Element::Img'}; 

यह भी encapsulation का उल्लंघन करता है। पर्ल आपको ऐसा करने देता है, लेकिन आपको यह पूछना चाहिए कि प्रकाशित WWW :: स्क्रिप्टर एपीआई के साथ डेटा कैसे प्राप्त करें।

+1

डब्ल्यूडब्ल्यूडब्लू :: स्क्रिप्टर ऑब्जेक्ट के विशाल डंप के डाउनलोड को इंगित करने वाले प्रश्न से जुड़ी एक टिप्पणी होती थी, उस टिप्पणी को हटा दिया गया था। यह उत्तर उस टिप्पणी का उत्तर है। – daxim

8

एक संभावित समाधान Data::Dumper::Perltidy का उपयोग करना है जो Perltidy के माध्यम से डेटा :: डंप का आउटपुट चलाता है।

#!/usr/bin/perl -w 

use strict; 
use Data::Dumper::Perltidy; 

my $data = [{ title => 'This is a test header' },{ data_range => 
      [ 0, 0, 3, 9] },{ format  => 'bold' }]; 

print Dumper $data; 

__END__ 

प्रिंटों:

$VAR1 = [ 
    { 'title'  => 'This is a test header' }, 
    { 'data_range' => [ 0, 0, 3, 9 ] }, 
    { 'format'  => 'bold' } 
]; 

एक और तरीका है Data::Dump उपयोग करने के लिए है।

0
$Data::Dumper::Sortkeys = 1; 

यदि आप अधिक विश्वसनीय परिणाम प्राप्त करना चाहते हैं तो आपको अगले डम्पर का पालन करना होगा। उस समारोह को संचालित करने के लिए उपयुक्त शब्द में रखें।

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