從 EXPR 中包含的檔案句柄類型 (或如果未提供 EXPR,則從 *ARGV
) 讀取。在純量環境中,每次呼叫會讀取並傳回下一行,直到到達檔案結尾,之後後續呼叫會傳回 undef
。在清單環境中,會讀取直到到達檔案結尾,並傳回一行清單。請注意,這裡使用的「行」概念是您可能使用 $/
(或 英文 中的 $INPUT_RECORD_SEPARATOR
) 定義的任何內容。請參閱 "$/" in perlvar。
當 $/
設定為 undef
,當 readline
處於純量環境 (即檔案啜飲模式) 中,且當讀取空檔案時,它會在第一次傳回 ''
,隨後傳回 undef
。
這是實作 <EXPR>
運算子的內部函式,但您可以直接使用它。<EXPR>
運算子在 "I/O Operators" in perlop 中有更詳細的討論。
my $line = <STDIN>;
my $line = readline(STDIN); # same thing
如果 readline
遇到作業系統錯誤,$!
將會設定為對應的錯誤訊息。當你從不可靠的文件句柄(例如 tty 或 socket)讀取資料時,檢查 $!
會有所幫助。以下範例使用 readline
的運算子形式,如果結果未定義,就會 die。
while ( ! eof($fh) ) {
defined( $_ = readline $fh ) or die "readline failed: $!";
...
}
請注意,你無法使用這種方式處理 ARGV
文件句柄的 readline
錯誤。在這種情況下,你必須自己開啟 @ARGV
的每個元素,因為 eof
處理 ARGV
的方式不同。
foreach my $arg (@ARGV) {
open(my $fh, $arg) or warn "Can't open $arg: $!";
while ( ! eof($fh) ) {
defined( $_ = readline $fh )
or die "readline failed for $arg: $!";
...
}
}
與 <EXPR>
運算子一樣,如果 readline
表達式用作 while
或 for
迴圈的條件,則會隱式指定給 $_
。如果 readline
表達式或將 readline
表達式明確指定給純量的 while
/for
條件,則條件實際上會測試表達式值的已定義性,而不是其常規真值。