2013-08-25 7 views
5

Die folgende Zeile funktioniert perfektpostfix for-Schleife in Perl wird nicht wie erwartet funktioniert

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

Aber das tut man nicht.

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

Es gibt mir eine Fehlermeldung wie folgt aus:

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

Warum? Wie kann ich das lösen?

Antwort

11

Die Palette Version von for Sets $_ auf jedes Element, so in @{$_} sind Sie zu dereferenzieren versucht $_, als ob es ein Array Referenz waren. Diese sind alle gleichwertig:

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

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

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

Die einfache Lösung ist eine weitere Variable für Ihr Array-Referenz zu erzeugen:

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

Noch einfacher: '@ $ ref = (0) x ($ max_size - $ curr_size) ':) – friedo

+3

@friedo Außer dass überschreibt, was in dem Array von zuvor war. Sie könnten jedoch 'Push @ $ ref, (0) x ($ max - $ curr)' obwohl. – TLP

+5

Ich möchte hinzufügen: ** Sie können nicht verschiedene Variable in Postfix-Schleife, nur '$ _' ** – gaussblurinc

Verwandte Themen