2013-08-25 17 views
5

aşağıdaki satırı mükemmelsonek çalışmıyor

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

çalışır Ama bu değildir.

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

Bana böyle bir hata mesajı verir:

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

Neden? Bunu Nasıl Çözebilirim?

cevap

11

for setleri her elemana $_ aralığı sürümü, bir dizi referans sanki sen dereference $_ çalışıyoruz @{$_} kadar.

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

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

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

kolay çözüm dizisi başvuru için başka bir değişken oluşturmaktır:: Bunların hepsi eşdeğerdir

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

Daha kolay: '@ $ ref = (0) x ($ max_size - $ curr_size) ':) – friedo

+3

@friedo Bundan önce dizideki şeylerin üzerine yazılıyor. Yine de, $ @ $ ref, (0) x ($ max - $ curr) 'tuşuna basabilirsiniz. – TLP

+5

Eklemek istiyorum: ** Postfix döngüsünde farklı değişken kullanamazsınız, sadece '$ _' ** – gaussblurinc

İlgili konular