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
创建一个类似于 new
的 FileHandle
。它需要两个参数,它们将传递给 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,您可能需要这些
这与"perlop 中的 I/O 操作符"中描述的<$fh>类似,只是它更易读,并且可以在列表上下文中安全地调用,但仍然只返回一行。
这与在列表上下文中调用时类似于<$fh>,用于读取文件中所有剩余的行,只是它更易读。如果在标量上下文中意外调用,它也会 croak()。
由于 FileHandle 是从 IO::File、IO::Seekable 和 IO::Handle 继承而来的,因此还有许多其他函数可用。有关更多函数的文档,请参见这些页面。
IO 扩展、perlfunc、"perlop 中的 I/O 操作符".