FileHandle - 為檔案句柄提供物件方法
use FileHandle;
my $fh = FileHandle->new;
if ($fh->open("< file")) {
print <$fh>;
$fh->close;
}
my $fh = FileHandle->new("> FOO");
if (defined $fh) {
print $fh "bar\n";
$fh->close;
}
my $fh = FileHandle->new("file", "r");
if (defined $fh) {
print <$fh>;
undef $fh; # automatically closes the file
}
my $fh = FileHandle->new("file", O_WRONLY|O_APPEND);
if (defined $fh) {
print $fh "corge\n";
undef $fh; # automatically closes the file
}
my $pos = $fh->getpos;
$fh->setpos($pos);
$fh->setvbuf(my $buffer_var, _IOLBF, 1024);
my ($readfh, $writefh) = FileHandle::pipe;
autoflush STDOUT 1;
注意:此類別現在是 IO::* 類別的前端。
FileHandle::new
會建立一個 FileHandle
,它是一個指向新建立符號的參考(請參閱 Symbol 套件)。如果它收到任何參數,這些參數會傳遞給 FileHandle::open
;如果開啟失敗,FileHandle
物件會被銷毀。否則,它會傳回給呼叫者。
FileHandle::new_from_fd
會建立一個 FileHandle
,就像 new
所做的一樣。它需要兩個參數,這些參數會傳遞給 FileHandle::fdopen
;如果 fdopen 失敗,FileHandle
物件會被銷毀。否則,它會傳回給呼叫者。
FileHandle::open
接受一個或兩個參數。使用一個參數時,它只是一個內建 open
函式的前端。使用兩個參數時,第一個參數是一個可能包含空白或其他特殊字元的檔名,第二個參數是開啟模式,後面可以選擇性地加上一個檔案權限值。
如果 FileHandle::open
收到一個 Perl 模式字串(">"、"+<" 等)或一個 POSIX fopen() 模式字串("w"、"r+" 等),它會使用基本的 Perl open
運算子。
如果 FileHandle::open
收到一個數字模式,它會將該模式和選擇性的權限值傳遞給 Perl sysopen
運算子。為了方便,FileHandle::import
會嘗試從 Fcntl 模組匯入 O_XXX 常數。如果動態載入不可用,這可能會失敗,但 FileHandle 的其他部分仍然會正常運作。
FileHandle::fdopen
就像 open
,只不過它的第一個參數不是檔名,而是檔案句柄名稱、FileHandle 物件或檔案描述符號碼。
如果 C 函數 fgetpos() 和 fsetpos() 可用,則 FileHandle::getpos
會傳回一個不透明值,表示 FileHandle 的目前位置,而 FileHandle::setpos
會使用該值來返回先前拜訪過的位置。
如果 C 函數 setvbuf() 可用,則 FileHandle::setvbuf
會設定 FileHandle 的緩衝政策。Perl 函數的呼叫順序與其 C 對應項相同,包括巨集 _IOFBF
、_IOLBF
和 _IONBF
,但緩衝參數指定要作為緩衝使用的純量變數。警告:由 FileHandle::setvbuf
作為緩衝使用的變數,在 FileHandle 關閉或再次呼叫 FileHandle::setvbuf
之前,不得以任何方式修改,否則可能會導致記憶體損毀!
請參閱 perlfunc,以取得以下每個受支援的 FileHandle
方法的完整說明,它們只是對應內建函數的前端
close
fileno
getc
gets
eof
clearerr
seek
tell
請參閱 perlvar,以取得以下每個受支援的 FileHandle
方法的完整說明
autoflush
output_field_separator
output_record_separator
input_record_separator
input_line_number
format_page_number
format_lines_per_page
format_lines_left
format_name
format_top_name
format_line_break_characters
format_formfeed
此外,對於執行正常的 I/O,您可能需要這些
請參閱 perlfunc 中的「print」。
請參閱 perlfunc 中的「printf」。
這就像 perlop 中的「I/O 算子」 中所述的 <$fh>,但它更易於閱讀,且可以在清單內容中安全呼叫,但仍只傳回一行。
這就像在清單內容中呼叫 <$fh> 以讀取檔案中所有剩餘行時一樣,但它更易於閱讀。如果意外在純量內容中呼叫它,它也會 croak()。
還有許多其他函數可用,因為 FileHandle 是從 IO::File、IO::Seekable 和 IO::Handle 衍生而來的。請參閱這些各自的頁面,以取得更多函數的說明文件。
IO 擴充模組,perlfunc,perlop 中的「I/O 運算子」。