1

IO::File#METHODS中描述的内置open函数、基本的 Perl 开放运算符和三参数开放运算符都是同一个功能吗?

4

1 回答 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 的包装器opensysopen因此可以肯定地说此方法与核心不同open;-) 此外,文档(您链接到的)也这么说。

于 2013-01-06T15:18:11.280 回答