ファイルハンドルには独自のタイプ名がありますか?
IO
。入力ファイルハンドル、出力ファイルハンドル、およびディレクトリハンドル(例えばopendir
を使用して作成):
$ perl -MDevel::Peek -e'Dump(*STDOUT{IO});'
SV = IV(0x3ba7118) at 0x3ba7128
REFCNT = 1
FLAGS = (TEMP,ROK)
RV = 0x3bc4390
SV = PVIO(0x3bc8668) at 0x3bc4390
REFCNT = 3
FLAGS = (OBJECT)
STASH = 0x3bc3fa0 "IO::File"
IFP = 0x3bbe180
OFP = 0x3bbe180
DIRP = 0x0
LINES = 0
PAGE = 0
PAGE_LEN = 60
LINES_LEFT = 0
TOP_GV = 0x0
FMT_GV = 0x0
BOTTOM_GV = 0x0
TYPE = '>'
FLAGS = 0x0
技術、IO
オブジェクトは、それに関連付けられた3つのハンドルを有することができます。通常、入力ハンドルと出力ハンドルのどちらか一方のみが設定されているか、または両方が同じハンドルに設定されています。 open(FOO, ...); opendir(FOO, ...); <FOO>; readdir(FOO);
を実行すると、別々のファイルとディレクトリハンドルのために正常に動作します。
ファイルハンドルが内部的にマップされているか、またはタイプグロブとして管理されているようです。あれは正しいですか?
通常、ファイルとディレクトリのIOオブジェクトはグロブにカプセル化されています。 しかし、それは必須ではありません。
$ perl -E'
my $fh = "STDOUT"; say($fh "$fh");
my $fh = *STDOUT; say($fh "$fh");
my $fh = \*STDOUT; say($fh "$fh");
my $fh = *STDOUT{IO}; say($fh "$fh");
'
STDOUT # Name
*main::STDOUT # Glob
GLOB(0x1175a48) # Reference to a glob. (This is returned by open $fh)
IO::File=IO(0x1175a60) # Reference to a (blessed) IO.
同じIOオブジェクトに入出力ハンドルを分割するにはどうすればよいですか? – melpomene
入力(読み取り)用と出力(書き込み)用の1つ。 1つがnullの場合を除いて、それらが異なることができるかどうかはわかりません。 – ikegami
どのようにそれらの1つをヌルにしますか? – melpomene