2010-02-03 62 views
3

所以我有一點問題搞清楚什麼Perl並在下面的情況:如何在Perl中檢查eof?

while(1){ 
$inputLine=<STDIN> 

#parse $inputLine below 
#BUT FIRST, I need to check if $inputLine = EOF 

} 

之前,我使用while(<>){}的顯而易見的答案,讓我說,那裏是我必須做的一個非常有力的理由上面(基本上設置了一個警報來中斷阻塞,我不希望代碼混亂的例子)。

有沒有辦法比較$inputLine == undef(因爲我認爲這是STDIN最後的結果)。

謝謝。

回答

11

裏面你的循環,使用

last unless defined $inputLine; 

perlfunc documentation on defined

定義EXPR
定義

返回一個布爾值,告訴EXPR是否有其它的值比未定義的值undef。如果EXPR不存在,將會檢查$_

許多操作返回undef以指示故障,文件結束,系統錯誤,未初始化的變量和其他特殊情況。此功能可讓您將undef與其他值區分開來。 (一個簡單的布爾測試不會區分undef,零,空字符串和"0",它們都是同樣錯誤的。)請注意,因爲undef是有效標量,所以它的存在並不一定表示異常條件:pop返回undef當它的參數是一個空數組時,或者當返回的元素碰巧是undef

+0

謝謝。我是perl的新手,但我正在掌握它。 – intiha

+0

@intiha不客氣!我們來幫忙! –

0

您可以在文件句柄上使用eof如果FILEHANDLE上的下一次讀取是EOF,則eof將返回1。

+3

從eof文檔:「(注意,這個函數實際上讀取一個字符,然後是'ungetc',所以在交互式上下文中並不是很有用。)」OP正在從STDIN中讀取,即在交互式上下文中。 –

+2

啊,我只是注重* eof *。在進一步的閱讀中,我也注意到它說你幾乎不需要使用* eof *,因爲你只需要尋找* undef *。有趣 - 我知道我已經使用了幾次。但我想TMTOWTDI;) –