如何过早地检测它是否是Perl中while循环期间的最后一次迭代

时间:2015-08-27 02:27:55

标签: perl

类似的问题(不解决我的问题):Is it possible to detect if the current while loop iteration is the last in perl?

上面的帖子有一个答案,它解决了仅在从文件中读取时检测它是否是最后一次迭代的问题。

在while循环中,是否可以检测当前迭代是否是mysql查询中的最后一个迭代?

while( my($id, $name, $email) = $sth->fetchrow_array() ) 
{
       if(this_is_last_iteration)
       {
            print "last iteration";
       }
}

2 个答案:

答案 0 :(得分:2)

您需要验证此编译,但粗略概述是:

my($rows) = $sth->rows;
my($i) = 0;
while( my($id, $name, $email) = $sth->fetchrow_array() ) 
{
    $i++;
    if ($i == $rows)
    {
        print "last iteration";
    }
}

如果您给我们更多背景信息,可能还有其他选择。例如,print语句是while循环中的最后一项。如果这与现实相符,你可以在循环后移动它并取消计数器。

一些评论员已正确注意到rows命令并不总是具有SELECT命令的正确值(例如,请参阅here)。如果您正在使用SELECT(这可能来自您的代码),那么这可能是一个问题。您可以在COUNT之前执行SELECT以获取行数,前提是数据集在COUNTSELECT之间没有变化。

答案 1 :(得分:1)

虽然您可以计算行以告知您何时查询SQL查询的最后结果,但否,在一般情况下,无法提前知道您是否在最后一次迭代中一段时间循环。

考虑以下示例:

while (rand() > 0.05) {
  say "Is this the last iteration?";
} 

没有办法提前预测rand()将返回什么,因此循环中的代码无法知道它是否会再次迭代直到下一次迭代开始。