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
?
答案 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