IO::File#METHODSで説明されている組み込みopen
関数、基本的な Perl の open 演算子、および 3 引数の open 演算子はすべて同じ関数ですか?
質問する
75 次
1 に答える
6
はいといいえ。
open
組み込みについては、 で説明されていますperldoc -f open
。この関数は、実際のテキスト指向の作業を行うのに適しています。入力ストリームの自動デコーディングまたはエンコーディングを行うために、PerlIO レイヤーを使用できます。
Perl には、 と呼ばれるファイルを開く別の方法がありますsysopen
。これは基本的に C の非常に薄いラッパー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 に答える