2013-08-25 11 views
5

Poniższy wiersz działa idealniepostfix do pętli w Perl nie działa zgodnie z oczekiwaniami

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

Ale ten jeden nie.

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

To daje mi komunikat o błędzie, jak poniżej:

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

Dlaczego? jak mogę to rozwiązać?

Odpowiedz

11

Wersja zakres for zestawów $_ do każdego elementu, tak w @{$_} próbujesz dereference $_ jakby były odniesienia tablicą. Są to równoważne:

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

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

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

Proste rozwiązanie jest stworzenie innej zmiennej celach tablicy:

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

Jeszcze prościej '@ $ ref = (0) x ($ MAX_SIZE - $ curr_size) ':) – friedo

+3

@friedo Z wyjątkiem tego, że nadpisuje to, co było w tablicy przedtem. Możesz jednak wykonać 'push @ $ ref, (0) x ($ max - $ curr)'. – TLP

+5

Chcę dodać: ** Nie możesz użyć innej zmiennej w pętli Postfix, tylko '$ _' ** – gaussblurinc

Powiązane problemy