2013-08-25 14 views
5

La seguente riga funziona perfettamentepostfix per il ciclo in Perl non funziona come previsto

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

Ma questo non lo fa.

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

Mi dà un messaggio di errore simile a questo:

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

Perché? Come posso risolvere questo?

risposta

11

La versione gamma di for set $_ ad ogni elemento, così in @{$_} si sta cercando di risolvere il riferimento $_ come se si trattasse di un riferimento ad array. Queste sono tutte equivalenti:

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

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

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

La soluzione più semplice è quello di creare un'altra variabile per il vostro riferimento array:

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

Ancora più facile: '@ $ ref = (0) x ($ max_size - $ curr_size) ':) – friedo

+3

@friedo Tranne che sovrascrive quello che era nella matrice di prima. Si potrebbe fare 'push @ $ ref, (0) x ($ max - $ curr)' comunque. – TLP

+5

Voglio aggiungere: ** Non è possibile utilizzare diverse variabili nel ciclo postfix, solo '$ _' ** – gaussblurinc

Problemi correlati