我從來沒有想過這是可能的,但讀了一些衝突的評論,並認爲我會問專家。是否有可能檢測當前while循環迭代是否是perl中的最後一個?
如果我正在逐行讀取一個文件的while循環,有沒有辦法執行一些代碼,如果當前的迭代將是循環中的最後一次迭代?我知道我可以簡單地在while循環後面放置這段代碼,以便代碼在最後一行之後執行,但我只是想知道迭代是否有任何方法來檢測它的位置。
謝謝!
我從來沒有想過這是可能的,但讀了一些衝突的評論,並認爲我會問專家。是否有可能檢測當前while循環迭代是否是perl中的最後一個?
如果我正在逐行讀取一個文件的while循環,有沒有辦法執行一些代碼,如果當前的迭代將是循環中的最後一次迭代?我知道我可以簡單地在while循環後面放置這段代碼,以便代碼在最後一行之後執行,但我只是想知道迭代是否有任何方法來檢測它的位置。
謝謝!
在你正在閱讀文件的特殊情況下,是的。
while(<>) {
if(eof) {
print "The last line of the file!\n";
}
}
如果您不是從STDIN或文件讀取該怎麼辦? –
@HunterMcMillen,在一般情況下,循環如何知道條件在下次評估時是錯誤的? – cjm
@cjm你沒有。這是預測的重點。 –
雖然可能有某些特殊情況下是有可能確定當前迭代的最後,它是不可能在一般情況下。一個簡單的例子:
while (rand() < 0.99) {
print "Hasn't ended yet\n";
}
因爲它是無法預測下一個隨機數將是什麼,這顯然是不可能知道任何給定的迭代是否將是最後一次迭代。
請參閱Perl的[eof](http://perldoc.perl.org/functions/eof.html)。 – Kenosis
還要注意'eof'和'eof()'之間的區別'在while(<>)'循環中,較短的一個可能是多次true @ARGV有多個文件,而較長的只返回一次真。 – vapace
太好了,謝謝你的建議! – jake9115