如何停止for循环中数组的重新评估

时间:2017-11-09 04:59:54

标签: perl for-loop

use feature 'say';
@arr = (1,2,3,4,5,6);

for $x (@arr)
{
    print $x;
    @arr = (6,5,4,3,2,1) if $x == 3;
}

对于上面的代码,perl将生成输出:123321

有没有办法阻止perl在循环中重新评估数组,以便输出为123456

3 个答案:

答案 0 :(得分:2)

生成一个列表以迭代

@ary = 1..6;

for $x (eval { @ary }) 
{
    print $x;
    @ary = (6,5,4,3,2,1); 
}                          # --> 123456

我希望这是好奇心或实验,但让我仍然评论:如果背后有一个实际的目标,肯定有更好的方法。

答案 1 :(得分:1)

您可以制作数组的浅表副本并取消引用它,

use feature 'say';
@arr = (1,2,3,4,5,6);

for $x (@{[ @arr ]})
{
    print $x;
    @arr = (6,5,4,3,2,1) if $x == 3;
}

答案 2 :(得分:0)

如果你想重新分配数组然后退出循环,我建议使用最后一个命令。最后一个命令将立即退出循环。

use feature 'say';
@arr = (1,2,3,4,5,6);

for $x (@arr)
{
  print $x;
  if ( 3 == $x ) 
  {
    @arr = (6,5,4,3,2,1);
    last;
  }
}

然后@arr将是指定的数组,不会被评估。

链接到最后一个命令的信息: http://perldoc.perl.org/functions/last.html