如何判断我的程序是否被管道传输给另一个人(Perl)

bar*_*ter 12 perl

当输出被输出时,"ls"表现不同:

 
> ls ??? 
bar  foo 
> ls ??? | cat 
bar 
foo 
Run Code Online (Sandbox Code Playgroud)

它是如何知道的,我将如何在Perl中执行此操作?

mob*_*mob 14

在Perl中,-t文件测试操作符指示文件句柄(包括STDIN)是否连接到终端.

还有一个-p测试操作符来指示文件句柄是否附加到管道.

$ perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN'
term:1, pipe:0
$ perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN' < /tmp/foo
term:0, pipe:0
$ echo foo | perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN'
term:0, pipe:1
Run Code Online (Sandbox Code Playgroud)

文件测试操作员文档perldoc -f -X.


Сух*_*й27 6

use IO::Interactive qw(is_interactive);

is_interactive() or warn "Being piped\n";
Run Code Online (Sandbox Code Playgroud)