什么是-t用于此Perl代码

rag*_*age 4 perl filehandle

我在perldoc中读到-t文件操作符用于决定是否向tty打开文件句柄.然后我读了一个tty是什么,从我的理解,这是一个终端的旧术语?

然而,我的主要问题是此代码用于:

if(-t STDERR) {
    die "some warning/error message here"
}
Run Code Online (Sandbox Code Playgroud)

我想我真的不明白"将文件句打开到tty"意味着什么.这是否意味着该文件句柄的特定输出出现在tty - 或终端上?除了终端之外,还可以参考一些东西吗?

mob*_*mob 6

此代码想要声明标准错误被重定向到文件.好跑

perl the_script.pl
Run Code Online (Sandbox Code Playgroud)

会触发die通话,但是

perl the_script.pl 2> error.log
Run Code Online (Sandbox Code Playgroud)

不会.


ike*_*ami 6

这是一种unix设备.控制台显示为程序的ttys,因此该语句基本上读作

"如果STDERR被发送到控制台,......"

但并不完全.我们不是在谈论物理设备,而是/dev/tty*.因此,程序可能假装成终端.例如,Expect使用IO :: Pty来执行此操作.

STDERR也可以是普通文件,管道或套接字.-t这些都是假的.

script 2>foo        # Plain file
script 2>&1 | cat   # Pipe
Run Code Online (Sandbox Code Playgroud)