IO::File#METHODS中描述的内置open
函数、基本的 Perl 开放运算符和三参数开放运算符都是同一个功能吗?
问问题
75 次
1 回答
6
是和不是。
open
内置在 中描述perldoc -f open
。此功能非常适合进行实际的、面向文本的工作。它可以使用 PerlIO 层对输入流进行自动解码或编码。
Perl 有另一种打开文件的方法,称为sysopen
. 这本质上是一个非常薄的 C's 包装器fdopen
,包含所有的陷阱和问题。在 Perl 中,sysopen
被称为
sysopen FILEHANDLE, FILENAME, MODE[, PERMS]
现在,IO::File
为打开文件提供了一个面向对象的接口,并且继承自IO::Handle
. 该open
方法包含以下代码:
sub open {
@_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])';
my ($fh, $file) = @_;
if (@_ > 2) {
my ($mode, $perms) = @_[2, 3];
if ($mode =~ /^\d+$/) {
defined $perms or $perms = 0666;
return sysopen($fh, $file, $mode, $perms);
} elsif ($mode =~ /:/) {
return open($fh, $mode, $file) if @_ == 3;
croak 'usage: $fh->open(FILENAME, IOLAYERS)';
} else {
return open($fh, IO::Handle::_open_mode_string($mode), $file);
}
}
open($fh, $file);
}
如您所见,它是 and 的包装器open
,sysopen
因此可以肯定地说此方法与核心不同open
;-) 此外,文档(您链接到的)也这么说。
于 2013-01-06T15:18:11.280 回答