在Perl中,是否有可能检测当前while循环迭代是否为最后一次?

6

我从未想过这是可能的,但看到了一些相互矛盾的评论,于是想请专家解答。

如果我正在通过while循环逐行读取文件并进行进展,是否有办法在当前迭代将是循环中的最后一次迭代时执行一些代码?我知道我可以将此代码直接放在while循环之后,以便在最后一行之后执行该代码,但我只是想知道是否迭代有任何方法来检测它的位置。

谢谢!


1
请查看 Perl 的 eof - Kenosis
4
请注意 eofeof() 之间的区别- 在一个 while(<>) 循环中,较短的可能会在 @ARGV 包含多个文件时被判定为真(true)多次,而较长的只会返回一次真(true)。 - vapace
2个回答

6
在你从文件中读取时,是的,这种情况是特殊情况。
while(<>) {
    if(eof) {
        print "The last line of the file!\n";
    }
}

1
@HunterMcMillen,在一般情况下,循环如何知道下次评估条件时条件将为假? - cjm
1
@jake9115:它实际上只是将 print "The last line of the file!\n" 移到了 while 循环内部,有些人会说这是一个干扰。 - Borodin

4

虽然在某些特殊情况下可能确定当前迭代是最后一次,但在一般情况下不可能。一个简单的例子:


while (rand() < 0.99) {
  print "Hasn't ended yet\n";
}

由于无法预测下一个随机数是什么,因此显然无法知道任何给定迭代是否为最终迭代。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接