内容

名称

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 创建一个类似于 newFileHandle。它需要两个参数,它们将传递给 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再次被调用之前,不得以任何方式修改,否则可能会导致内存损坏!

有关以下每个受支持的FileHandle方法的完整描述,请参见perlfunc,这些方法只是对应内置函数的前端

close
fileno
getc
gets
eof
clearerr
seek
tell

有关以下每个受支持的FileHandle方法的完整描述,请参见perlvar

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,您可能需要这些

$fh->print

参见"perlfunc 中的 print".

$fh->printf

参见"perlfunc 中的 printf".

$fh->getline

这与"perlop 中的 I/O 操作符"中描述的<$fh>类似,只是它更易读,并且可以在列表上下文中安全地调用,但仍然只返回一行。

$fh->getlines

这与在列表上下文中调用时类似于<$fh>,用于读取文件中所有剩余的行,只是它更易读。如果在标量上下文中意外调用,它也会 croak()。

由于 FileHandle 是从 IO::File、IO::Seekable 和 IO::Handle 继承而来的,因此还有许多其他函数可用。有关更多函数的文档,请参见这些页面。

另请参见

IO 扩展、perlfunc"perlop 中的 I/O 操作符".