2008-10-23 8 views
25

मुझे PHP में print_r बहुत उपयोगी लगता है, लेकिन आश्चर्य है कि पर्ल में दूरस्थ रूप से कुछ भी है या नहीं?पर्ल के PHP के print_r() के बराबर क्या है?

+7

जब बराबर कार्यों की तलाश में, यह आम तौर पर एक अच्छा विचार समझाने के लिए क्या मूल करता है:

print objectToString($json_data); 

इस उत्पादन देता है। प्रत्येक पर्ल प्रोग्रामर यह नहीं जान पाएगा कि PHP का print_r() फ़ंक्शन क्या करता है। –

उत्तर

42

नोट @tchrist से Data::Dump की सिफारिश करता है। मुझे इसके बारे में पता नहीं था, लेकिन इसकी प्रकृति से, ऐसा लगता है कि परिणामों का व्याख्या करने के लिए बेहतर दिखने और आसान बनाने के लिए यह बहुत आसान है।

Data::Dumper:

ऊपर के लिंक में दिखाया गया है उदाहरण के एक टुकड़ा।

use Data::Dumper; 

package Foo; 
sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]}; 

package Fuz;      # a weird REF-REF-SCALAR object 
sub new {bless \($_ = \ 'fu\'z'), $_[0]}; 

package main; 
$foo = Foo->new; 
$fuz = Fuz->new; 
$boo = [ 1, [], "abcd", \*foo, 
     {1 => 'a', 023 => 'b', 0x45 => 'c'}, 
     \\"p\q\'r", $foo, $fuz]; 

######## 
# simple usage 
######## 

$bar = eval(Dumper($boo)); 
print([email protected]) if [email protected]; 
print Dumper($boo), Dumper($bar); # pretty print (no array indices) 

$Data::Dumper::Terse = 1;   # don't output names where feasible 
$Data::Dumper::Indent = 0;   # turn off all pretty print 
print Dumper($boo), "\n"; 

$Data::Dumper::Indent = 1;   # mild pretty print 
print Dumper($boo); 

$Data::Dumper::Indent = 3;   # pretty print with array indices 
print Dumper($boo); 

$Data::Dumper::Useqq = 1;   # print strings in double quotes 
print Dumper($boo); 
+0

सुनिश्चित करें कि आप किसी भी पैकेज चर को स्थानीयकृत करते हैं। उदाहरण के लिए, 'स्थानीय $ डेटा :: डम्पर :: इंडेंट = 3; '। –

+1

'डेटा :: डंप' बहुत बेहतर है। – tchrist

+0

@ क्रिसमस: अगर आप एक उत्तर जोड़ सकते हैं तो क्यों न हो, हमारे लिए नोबस क्यों। – naught101

8

के रूप में आम तौर पर पर्ल के साथ, आप सम्मानित डाटा :: डम्पर के लिए वैकल्पिक समाधान पसंद कर सकते हैं:

  • Data::Dump::Streamer डाटा :: डम्पर से एक terser उत्पादन है, और भी कुछ डेटा की तुलना में बेहतर कर सकते हैं क्रमानुसार डेटा :: डम्पर,
  • YAML (या Yaml::Syck, या कोई अन्य वाईएएमएल मॉड्यूल) वाईएएमएल में डेटा उत्पन्न करता है, जो काफी सुगम है।

और निश्चित रूप से डीबगर के साथ, आप 'x' कमांड के साथ किसी भी चर को प्रदर्शित कर सकते हैं। मुझे विशेष रूप से 'x 2 $complex_structure' फ़ॉर्म पसंद है, जहां 2 (या कोई भी संख्या) डीबगर को नेस्टेड डेटा के केवल 2 स्तर प्रदर्शित करने के लिए बताती है।

6

Data::Dumper के लिए एक वैकल्पिक जो मान्य पर्ल कोड लेकिन बजाय एक अधिक skimmable प्रारूप (पर्ल डिबगर की x आदेश के रूप में ही) का उत्पादन नहीं करता Dumpvalue है। यह बहुत कम स्मृति का उपभोग करता है।

साथ ही, Data::Dump::Streamer है, जो Data::Dumper की तुलना में विभिन्न किनारे और कोने मामलों में अधिक सटीक है।

2

मैं Data::Dump का उपयोग करता हूं, यह आउटपुट डेटा :: डम्पर (कोई $ VAR1) से थोड़ा क्लीनर नहीं है, यह त्वरित शॉर्टकट प्रदान करता है और यह डीटीआरटी की भी कोशिश करता है, यानी यह शून्य संदर्भ में बुलाए जाने पर एसटीडीईआरआर को प्रिंट करेगा और वापस लौटाएगा डंप स्ट्रिंग जब नहीं।

2

मैं एक ही चीज़ की तलाश में गया और this lovely little Perl function पाया, स्पष्ट रूप से print_r() जैसे परिणाम उत्पन्न करने के लिए।

स्क्रिप्ट का लेखक एक फोरम here में अपना सटीक प्रश्न पूछ रहा था।

HASH { 
time        => 1233173875 
error       => 0 
node        => HASH { 
    vid        => 1011 
    moderate       => 0 
    field_datestring     => ARRAY { 
     HASH { 
      value       => August 30, 1979 
     } 
    } 

    field_tagged_persons    => ARRAY { 
     HASH { 
      nid        => undef 
     } 
    } 

...and so on... 
+0

उस लिंक किए गए पृष्ठ पर कहीं भी 'प्यारा छोटा पर्ल फ़ंक्शन' नहीं मिला ?? – someuser

+0

@ सोमेसर हां, लिंक मर गया, मैंने इसे संग्रहीत संस्करण में बदल दिया है – user

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