perl中的postfix for循环不能正常工作

Alb*_*lby 5 syntax perl

以下行完美地运作

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

但是这个没有.

push (@{$_}, 0) for (1 .. ($max_size - $curr_size));
Run Code Online (Sandbox Code Playgroud)

它给我一个这样的错误信息:

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

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

Jon*_*rdy 11

每个元素的for集合的范围版本$_,因此@{$_}您尝试取消引用,$_就像它是一个数组引用一样.这些都是等价的:

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

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

print "$_\n" for (1..10);
Run Code Online (Sandbox Code Playgroud)

简单的解决方案是为数组引用创建另一个变量:

push @{$ref}, 0 for 1 .. $max_size - $curr_size;
Run Code Online (Sandbox Code Playgroud)

  • 我想添加:**你不能在后缀循环中使用不同的变量,只有`$ _`** (5认同)
  • 更简单:`@ $ ref =(0)x($ max_size - $ curr_size)`:) (3认同)
  • @friedo除了覆盖之前数组中的内容.你可能会``推@ $ ref,(0)x($ max - $ curr)`. (3认同)