5

以下行完美运行

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.

为什么?我该如何解决这个问题?

4

1 回答 1

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;
于 2013-08-25T02:41:23.443 回答