![Perl 将一些内容从脚本中输出,另一些内容输出到屏幕上](https://linux22.com/image/24030/Perl%20%E5%B0%86%E4%B8%80%E4%BA%9B%E5%86%85%E5%AE%B9%E4%BB%8E%E8%84%9A%E6%9C%AC%E4%B8%AD%E8%BE%93%E5%87%BA%EF%BC%8C%E5%8F%A6%E4%B8%80%E4%BA%9B%E5%86%85%E5%AE%B9%E8%BE%93%E5%87%BA%E5%88%B0%E5%B1%8F%E5%B9%95%E4%B8%8A.png)
如何通过 Perl 脚本将某些输出传送到屏幕以及其他选定的输出?
答案1
通过使用不同的文件句柄。
默认情况下,您将同时拥有STDOUT
和STDERR
。 Perl 中的函数print
实际上是 的简写print STDOUT
。
在您的终端中STDOUT
给出了文件句柄1
并STDERR
给出了文件句柄2
。
下面是打印到每个文件句柄并将每个文件句柄重定向到 /dev/null 的示例。
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";'
foo
bar
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 1> /dev/null
bar
% perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 2> /dev/null
foo
- 第一个命令打印两者。
- 第二个命令丢弃
STDOUT
并仅打印STDERR
- 第三个命令丢弃
STDERR
并仅打印STDOUT
您还可以声明自己的文件句柄(例如日志文件)并打印到该文件句柄。看perldoc -f open
。
答案2
您可能想阅读 perlipc 文档,特别是有关命名管道的部分。
http://perldoc.perl.org/perlipc.html#Named-Pipes
perlipc - Perl 进程间通信(信号、fifo、管道、安全子进程、套接字和信号量)
如果您需要与外部程序进行双向(读和写)通信,那么 IPC::Open2 或 IPC::Open3 模块(标准 perl 库,也记录在上面的 URL 中)将很有用。