1
perl -f ref列出的名稱都不是用於文件句柄。下面的代碼返回GLOB,所以看起來文件句柄被內部映射到或者作爲一個typeglob被管理。那是對的嗎?什麼是Perl中的文件句柄的內置名稱?
open FH, '>', "out.txt";
my $ref = \*FH;
print "ref \$ref:", ref $ref, "\n";
一個文件句柄有它自己的類型名嗎?
perl -f ref列出的名稱都不是用於文件句柄。下面的代碼返回GLOB,所以看起來文件句柄被內部映射到或者作爲一個typeglob被管理。那是對的嗎?什麼是Perl中的文件句柄的內置名稱?
open FH, '>', "out.txt";
my $ref = \*FH;
print "ref \$ref:", ref $ref, "\n";
一個文件句柄有它自己的類型名嗎?
一個文件句柄有它自己的類型名嗎?
IO
。
$ 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
對象可以具有與它相關聯的三個手柄:一個輸入文件句柄,一個輸出文件句柄,目錄句柄(例如,使用opendir
創建)。通常,只有一個輸入和輸出句柄被設置,或者它們都被設置爲相同的句柄。做open(FOO, ...); opendir(FOO, ...); <FOO>; readdir(FOO);
將工作正常,因爲單獨的文件和目錄句柄。
它似乎將文件句柄內部映射到或作爲類型庫進行管理。那是對的嗎?
文件和目錄IO對象通常封裝在glob中,是的。 但這不是必需的。
$ 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
一個用於輸入(讀取)和一個用於輸出(寫入)。我不知道他們是否會有所不同,除非一個人爲空。 – ikegami
你如何讓他們中的一個爲空? – melpomene