我正在尝试处理没有参数和管道数据传递到 Perl 脚本的可能性。我假设如果没有参数,则输入将通过 STDIN 进行管道传输。但是,如果用户未提供任何参数并且未将任何内容通过管道传递给脚本,它将尝试获取键盘输入。我的目标是提供错误消息。
很遗憾,select()
不可移植到某些非 POSIX 系统。
有没有其他方法可以实现最大的可移植性?
Perl 附带-t
文件测试运算符,它告诉您特定的文件句柄是否对 TTY 打开。所以,你应该能够这样做:
if ( -t STDIN and not @ARGV ) {
# We're talking to a terminal, but have no command line arguments.
# Complain loudly.
}
else {
# We're either reading from a file or pipe, or we have arguments in
# @ARGV to process.
}
快速测试表明,它在使用 Perl 5.10.0 的 Windows 和使用 Perl 5.8.8 的 Linux 上运行良好,因此它应该可以在最常见的 Perl 环境中移植。
正如其他人提到的,select
这不是一个可靠的选择,因为有时您可能正在从进程中读取数据,但该进程尚未开始写入。
一切顺利,
Paul
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)