Perl中的文件句柄的内置名称是什么?

Ltf*_*4an 1 perl filehandle

perl -f ref列出的名称似乎都不是文件句柄.以下代码返回GLOB,因此似乎filehandle内部映射到或作为typeglob进行管理.那是对的吗?

open FH, '>', "out.txt";
my $ref = \*FH;
print "ref \$ref:", ref $ref, "\n";
Run Code Online (Sandbox Code Playgroud)

文件句柄是否有自己的类型名称?

ike*_*ami 9

文件句柄是否有自己的类型名称?

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
Run Code Online (Sandbox Code Playgroud)

从技术上讲,IO对象可以有三个与之关联的句柄:输入文件句柄,输出文件句柄和目录句柄(例如使用创建opendir).通常,只设置一个输入和输出句柄,或者它们都设置为相同的句柄.否则open(FOO, ...); opendir(FOO, ...); <FOO>; readdir(FOO);会因为单独的文件和目录句柄的正常工作.

似乎filehandle在内部映射到或作为typeglob进行管理.那是对的吗?

文件和目录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.
Run Code Online (Sandbox Code Playgroud)