2013-08-25 28 views
5

下面一行的作品完美后缀为perl的循环不工作

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

即使更容易:'@ $ REF =(0)×($ MAX_SIZE - $ curr_size) ':) – friedo

+3

@friedo除了覆盖之前的数组中的内容。尽管你可能会'推@ @ ref,(0)x($ max - $ curr)'。 – TLP

+5

我想补充:**你不能在postfix循环中使用不同的变量,只有'$ _' ** – gaussblurinc