2013-10-15 31 views
6

我從來沒有想過這是可能的,但讀了一些衝突的評論,並認爲我會問專家。是否有可能檢測當前while循環迭代是否是perl中的最後一個?

如果我正在逐行讀取一個文件的while循環,有沒有辦法執行一些代碼,如果當前的迭代將是循環中的最後一次迭代?我知道我可以簡單地在while循環後面放置這段代碼,以便代碼在最後一行之後執行,但我只是想知道迭代是否有任何方法來檢測它的位置。

謝謝!

+1

請參閱Perl的[eof](http://perldoc.perl.org/functions/eof.html)。 – Kenosis

+4

還要注意'eof'和'eof()'之間的區別'在while(<>)'循環中,較短的一個可能是多次true @ARGV有多個文件,而較長的只返回一次真。 – vapace

+0

太好了,謝謝你的建議! – jake9115

回答

6

在你正在閱讀文件的特殊情況下,是的。

while(<>) { 
    if(eof) { 
     print "The last line of the file!\n"; 
    } 
} 
+0

如果您不是從STDIN或文件讀取該怎麼辦? –

+1

@HunterMcMillen,在一般情況下,循環如何知道條件在下次評估時是錯誤的? – cjm

+0

@cjm你沒有。這是預測的重點。 –

4

雖然可能有某些特殊情況下是有可能確定當前迭代的最後,它是不可能在一般情況下。一個簡單的例子:

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

因爲它是無法預測下一個隨機數將是什麼,這顯然是不可能知道任何給定的迭代是否將是最後一次迭代。

相關問題