2009-08-27 14 views
16

मैं एक सरणी एक संरचना के एक सदस्य है कि है:मैं एक पर्ल सरणी संदर्भ पर फिर से कैसे कर सकता हूं?

$self->{myArray} = ["value1", "value2"]; 

और मैं निम्नलिखित कोड का उपयोग कर इस पर पुनरावृति करने के लिए कोशिश कर रहा हूँ:

my @myArray = $self->{myArray}; 
foreach my $foo (@myArray){ 
    #Do something with the using $foo 
    ... 
} 

समस्या यह है कि 'foreach' है लूप को केवल एक बार निष्पादित किया जाता है (जब मैं इसे दो बार निष्पादित करने की अपेक्षा करता हूं, क्योंकि @myArray में दो तत्व हैं: "value1" और "value2")।

जब मैं @myArray सरणी आकार की जांच करता हूं, तो मुझे लगता है कि इसका आकार 1 है। मैं इस कोड में क्या गलत कर रहा हूं?

+0

जवाब के लिए धन्यवाद, यह काम किया। मैंने पहला जवाब स्वीकार कर लिया है ... –

+6

आप डेटा स्ट्रक्चर कुकबुक को पढ़ना चाहेंगे: http://perldoc.perl.org/perldsc.html इसमें उदाहरण हैं कि कई अलग-अलग डेटा संरचनाओं को कैसे बनाया और एक्सेस किया जाए। – daotoad

उत्तर

28

मुझे विश्वास है कि:

$self->{myArray} returns a reference. 

आप सरणी वापस जाने के लिए चाहते हैं:

@{$self->{myArray}} 
+0

आह ने एफएम द्वारा पंच को पीटा :) – chollida

+1

और यदि आप जानना चाहते हैं कि हैश रेफ के लिए यह कैसे करना है: % {$ self -> {myHash}} – Kevin

10

$self->{myArray} एक सरणी संदर्भ है। आपको इसे अव्यवस्थित करने की आवश्यकता है।

my @myArray = @{ $self->{myArray} }; 

इस तरह की स्थितियों में, Data::Dumper मॉड्यूल बहुत उपयोगी है। उदाहरण के लिए, यदि @myArray अपेक्षित व्यवहार नहीं कर रहे थे, तो आप समस्या को प्रकट करने के लिए इस कोड को चला सकते हैं।

use Data::Dumper; 
print Dumper(\@myArray); 
6

$ आत्म -> {myArray} एक सरणी संदर्भ, नहीं एक सरणी है - आप एक हैश अंदर वास्तविक सरणियों, केवल संदर्भ की दुकान नहीं कर सकते हैं। इस प्रयास करें:

my $myArray = $self->{myArray}; 
for my $foo (@$myArray){ 
    # do something with $foo 
} 

तुम भी perldoc perlref पर एक नजर है कर सकते हैं।