जवाबों:
डेटा :: डम्पर आपका दोस्त है।
use Data::Dumper;
my %hash = ('abc' => 123, 'def' => [4,5,6]);
print Dumper(\%hash);
उत्पादन होगा
$VAR1 = {
'def' => [
4,
5,
6
],
'abc' => 123
};
&
C और C ++ में ऑपरेटर की तरह एक संदर्भ बनाता है । इस संदर्भ में इसका कारण यह है कि पर्ल में, यदि आप एक फ़ंक्शन को हैश मान के साथ तर्क के रूप में कहते हैं, तो हैश मान को सूचीबद्ध किया जाता है और कई तर्कों में विस्तारित किया जाता है - इसलिए %hsh=("a" => 1, "b" => 2); foo(%hsh);
इसके बराबर होगा foo("a", 1, "b", 2)
। : आप के बजाय समारोह हैश पर ही काम करना चाहते हैं, तो आप हैश के लिए एक संदर्भ में उत्तीर्ण होना foo(\%hsh);
देखें perldoc.perl.org/perlsub.html#Pass-by-Reference
आसान:
print "$_ $h{$_}\n" for (keys %h);
सुरुचिपूर्ण, लेकिन वास्तव में 30% धीमी (!):
while (my ($k,$v)=each %h){print "$k $v\n"}
print "$_ $h{$_}\n" for (keys %h);
, $k
उस उदाहरण में मौजूद नहीं है।
for
पाश से अधिक तेजी से है while
: कम से कम 10,000 कुंजियों तक gist.github.com/151792
यहां आप उपयोग किए बिना कैसे प्रिंट कर सकते हैं Data::Dumper
print "@{[%hash]}";
डिबगिंग उद्देश्यों के लिए मैं अक्सर उपयोग करूंगा YAML
।
use strict;
use warnings;
use YAML;
my %variable = ('abc' => 123, 'def' => [4,5,6]);
print "# %variable\n", Dump \%variable;
का परिणाम:
# %variable
---
abc: 123
def:
- 4
- 5
- 6
दूसरी बार उपयोग करूंगा Data::Dump
। आपको इसे एक अच्छे प्रारूप में आउटपुट करने के लिए कई चर के रूप में सेट करने की आवश्यकता नहीं है, जितना आप इसके लिए करते हैं Data::Dumper
।
use Data::Dump = 'dump';
print dump(\%variable), "\n";
{ abc => 123, def => [4, 5, 6] }
हाल ही में मैं Data::Printer
डिबगिंग के लिए उपयोग कर रहा हूं ।
use Data::Printer;
p %variable;
{
abc 123,
def [
[0] 4,
[1] 5,
[2] 6
]
}
(एक टर्मिनल पर परिणाम अधिक रंगीन हो सकता है)
मैंने यहां दिखाए गए अन्य उदाहरणों के विपरीत, यह एक स्पष्ट रूप से केवल प्रदर्शन उद्देश्यों के लिए बनाया गया है। यदि आप किसी बंधे हुए चर या किसी वस्तु की संरचना को बाहर निकालते हैं तो आसानी से दिखाई देता है।
use strict;
use warnings;
use MTie::Hash;
use Data::Printer;
my $h = tie my %h, "Tie::StdHash";
@h{'a'..'d'}='A'..'D';
p %h;
print "\n";
p $h;
{
a "A",
b "B",
c "C",
d "D"
} (tied to Tie::StdHash)
Tie::StdHash {
public methods (9) : CLEAR, DELETE, EXISTS, FETCH, FIRSTKEY, NEXTKEY, SCALAR, STORE, TIEHASH
private methods (0)
internals: {
a "A",
b "B",
c "C",
d "D"
}
}
=>
तरह से आउटपुट नहीं करता है जैसा आप उम्मीद करते हैं। इसके बजाय यह हमेशा कुंजी, कई रिक्त स्थान और फिर मूल्य को प्रिंट करता है। जो आउटपुट पर मानव स्कैन में मदद करता है।
उत्तर इस बात पर निर्भर करता है कि आपके हैश में क्या है। यदि आपके पास एक साधारण हैश एक साधारण है
print map { "$_ $h{$_}\n" } keys %h;
या
print "$_ $h{$_}\n" for keys %h;
करेंगे, लेकिन अगर आपके पास एक हैश है जो संदर्भों के साथ आबाद है तो आप कुछ ऐसा करेंगे जो उन संदर्भों को चला सकता है और एक समझदार आउटपुट का उत्पादन कर सकता है। संदर्भों के इस चलना को आमतौर पर क्रमबद्धता कहा जाता है। कई मॉड्यूल हैं जो विभिन्न शैलियों को लागू करते हैं, कुछ अधिक लोकप्रिय हैं:
इस तथ्य के कारण कि Data::Dumper
कोर पर्ल लाइब्रेरी का हिस्सा है, यह शायद सबसे लोकप्रिय है; हालांकि, कुछ अन्य मॉड्यूल में बहुत अच्छी चीजें हैं।
use
Smart::Comments
, मैं इसे उस परिप्रेक्ष्य से भी देखता हूं। लेकिन काउंटर के लिए, Smart::Comments
एक स्कोप्ड मॉड्यूल के रूप में बहुत अच्छा व्यवहार किया जाता है , किसी भी मॉड्यूल में आउटपुट व्यवहार नहीं होना चाहिए जो SC का उपयोग भी नहीं करता है । इसलिए, समस्या उन स्कोपों को एक उपयोग विवरण के साथ पृथक किया जाएगा । यदि आप कह रहे हैं कि एक रखरखाव प्रोग्रामर में शामिल मॉड्यूल पर डॉक्टर को पढ़ने की कोई जिम्मेदारी नहीं है, तो मैं सहमत नहीं हो सकता। फिर भी, टिप्पणी करने के लिए धन्यवाद
लूपिंग:
foreach(keys %my_hash) { print "$_ / $my_hash{$_}\n"; }
कार्यात्मक
map {print "$_ / $my_hash{$_}\n"; } keys %my_hash;
लेकिन सरासर लालित्य के लिए, मुझे wrang-wrang का चयन करना होगा। अपने स्वयं के कोड के लिए, मैं अपना फ़ार्च चुनूंगा। या टेट्रो का डम्पर उपयोग।
foreach
और के उपयोगों के बीच कोई कार्यात्मक अंतर नहीं है map
। map
सूची में परिवर्तन के लिए इस्तेमाल किया जाना चाहिए, एक लूप का अनुकरण करने के लिए शून्य संदर्भ में नहीं
मेरे अनुभवों में सबसे आसान तरीका सिर्फ डंपवेल का उपयोग करना है ।
use Dumpvalue;
...
my %hash = { key => "value", foo => "bar" };
my $dumper = new DumpValue();
$dumper->dumpValue(\%hash);
एक आकर्षण की तरह काम करता है और आपको हैश को प्रारूपित करने के बारे में चिंता करने की ज़रूरत नहीं है, क्योंकि यह इसे आउटपुट करता है जैसे पर्ल डीबगर करता है (डीबगिंग के लिए बढ़िया)। इसके अलावा, डंपवल्यू को पर्ल मॉड्यूल के स्टॉक सेट के साथ शामिल किया गया है, इसलिए आपको सीपीएएन के साथ गड़बड़ करने की ज़रूरत नहीं है यदि आप किसी प्रकार के ड्रैकियन प्रॉक्सी के पीछे हैं (जैसे मैं काम पर हूं)।
यदि आप पांडित्यपूर्ण होना चाहते हैं और इसे एक पंक्ति में रखना चाहते हैं (बिना उपयोग के बयान और शबंग), तो मैं टेट्रोमिनो के उत्तर और सुझाव के लिए गुल्लक को छांट दूंगा:
print Dumper( { 'abc' => 123, 'def' => [4,5,6] } );
अस्थायी चर को छोड़ने के लिए अनाम हैश का उपयोग करने के अलावा कुछ विशेष नहीं करना;)