Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以检测当前while循环迭代是否是perl中的最后一次?_Perl_Loops_While Loop - Fatal编程技术网

是否可以检测当前while循环迭代是否是perl中的最后一次?

是否可以检测当前while循环迭代是否是perl中的最后一次?,perl,loops,while-loop,Perl,Loops,While Loop,我从未想过这是可能的,但读到一些相互矛盾的评论,我想我会问专家 如果我正在通过一个while循环逐行读取文件,如果当前迭代是循环中的最后一次迭代,有没有办法执行一些代码?我知道我可以直接将代码放在while循环之后,这样代码就可以在最后一行之后执行,但我只是想知道迭代是否有任何方法可以检测它的位置 谢谢 在从文件读取的特殊情况下,是的 while(<>) { if(eof) { print "The last line of the file!\n";

我从未想过这是可能的,但读到一些相互矛盾的评论,我想我会问专家

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


谢谢

在从文件读取的特殊情况下,是的

while(<>) {
    if(eof) {
        print "The last line of the file!\n";
    }
}
while(){
如果(eof){
打印“文件的最后一行!\n”;
}
}

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

while (rand() < 0.99) {
  print "Hasn't ended yet\n";
}
while(rand()<0.99){
打印“尚未结束\n”;
}

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

参见Perl。还要注意
eof
eof()
-在
while()
循环中的区别,短的可能多次为真@ARGV有多个文件,长的可能只返回一次真。太好了,谢谢你的建议@HunterMcMillen,在一般情况下,循环如何知道下次评估时该条件将为假?@jake9115:它真正做的只是将
打印“文件的最后一行!\n”
移动到
循环中,有人会说这是一种干扰。