2013-08-25 3 views
5

निम्न पंक्ति पूरी तरह से काम करता हैपोस्टफ़िक्स अपेक्षा के अनुरूप काम नहीं कर रहा

for(my $i=0; $i < ($max_size - $curr_size) ; $i++){ 
    push (@{$_}, 0); 
} 

लेकिन यह एक ऐसा नहीं करता।

push (@{$_}, 0) for (1 .. ($max_size - $curr_size)); 

यह मुझे इस तरह एक त्रुटि संदेश देता है:

Can't use string ("1") as an ARRAY ref while "strict refs" in use at coordReadEasy.pl line 124, <DATA> line 16. 

क्यों? इसे कैसे हल किया जा सकता है?

उत्तर

11

for सेट प्रत्येक तत्व को $_ की सीमा संस्करण है, तो @{$_} में आप भिन्नता $_ की कोशिश कर रहे है जैसे कि यह एक सरणी संदर्भ थे।

for my $x (1..10) { 
    print "$x\n" 
} 

for (1..10) { 
    print "$_\n" 
} 

print "$_\n" for (1..10); 

आसान समाधान अपने सरणी में संदर्भ के लिए एक और चर बनाने के लिए है: ये सभी बराबर हैं

push @{$ref}, 0 for 1 .. $max_size - $curr_size; 
+3

भी आसान: '@ $ रेफरी = (0) एक्स ($ MAX_SIZE - $ curr_size) ':) – friedo

+3

@friedo सिवाय इसके कि पहले से सरणी में क्या था ओवरराइट करता है। आप 'पुश @ $ रेफरी, (0) एक्स ($ अधिकतम - $ curr) कर सकते हैं। – TLP

+5

मैं जोड़ना चाहता हूं: ** आप पोस्टफिक्स लूप में अलग-अलग चर का उपयोग नहीं कर सकते हैं, केवल '$ _' ** – gaussblurinc

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