2010-02-23 20 views
9

कहें कि मेरे पास कुछ ऐसा था:मैं पर्ल में एक नया, खाली हैश संदर्भ कैसे बना सकता हूं?

# %superhash is some predefined hash with more than 0 keys; 
%hash =(); 
foreach my $key (keys %superhash){ 
    $superhash{ $key } = %hash; 
    %hash =(); 
} 

क्या सुपरशैश की सभी चाबियाँ एक ही खाली हैश को %hash द्वारा एक्सेस की गई हैं या क्या वे अलग-अलग खाली हैंश?

यदि नहीं, तो मैं कैसे सुनिश्चित कर सकता हूं कि वे खाली हैंश पर इंगित करते हैं?

+0

@ माफी माफी माँगना। मेरे पास वास्तविक कोड पोस्ट करने के लिए थोड़ा जटिल था, इसलिए मैं इसे प्रश्न के लिए पुनः लिखता हूं। –

उत्तर

16

आपको इसे किसी एक स्लॉट में स्टोर करने से पहले एक बहुवचन डेटा प्रकार (सरणी या हैश) का संदर्भ लेने के लिए \ ऑपरेटर का उपयोग करने की आवश्यकता है। लेकिन दिए गए उदाहरण कोड में, यदि संदर्भित किया गया है, तो प्रत्येक एक ही हैश होगा।

तरीका है अपने डेटा संरचना को प्रारंभ करने के लिए है:

foreach my $key (keys %superhash) { 
    $superhash{ $key } = {}; # New empty hash reference 
} 

लेकिन इस तरह प्रारंभ autovivification (उचित कंटेनर वस्तुओं बनाते समय एक चर एक कंटेनर के रूप में प्रयोग किया जाता है) की वजह से Perl में बड़े पैमाने पर अनावश्यक है।

my %hash; 

$hash{a}{b} = 1; 

अब %hash एक चाबी, 'एक' है, जो एक गुमनाम hashref का अपना महत्व होता है, मुख्य/मान जोड़े b => 1 युक्त है। Arrays उसी तरह से autovivify।

+0

सहमत हुए। के आसपास एक अतिरिक्त हैश ले जाने की आवश्यकता नहीं है जब पर्ल को इसकी आवश्यकता नहीं होती है। – Zaid

+0

मैं $ हैश {ए} की चाबियों का उपयोग कैसे करूं? जब मैं अपने $ आरके (चाबियाँ $ हैश {ए}) की कोशिश करता हूं {... 'यह मुझे एक त्रुटि देता है: प्रकार हैश –

+0

आह मुझे मिल गया: '$ deref = $ हैश {a}' और फिर '$ $ foreach (कुंजी% $ deref) {...' –

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