什么是-t用于此Perl代码

时间:2013-12-02 15:48:21

标签: perl filehandle

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

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

if(-t STDERR) {
    die "some warning/error message here"
}

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

2 个答案:

答案 0 :(得分:6)

此代码想断言标准错误正被重定向到文件。所以正在运行

perl the_script.pl

会触发die来电,但

perl the_script.pl 2> error.log

不会。

答案 1 :(得分:6)

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

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

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

STDERR也可以是普通文件,管道或套接字。 -t对于这些将是错误的。

script 2>foo        # Plain file
script 2>&1 | cat   # Pipe