gpt4 book ai didi

perl - 如何在不使用 select 的情况下检查(查看)Perl 中管道数据的 STDIN?

转载 作者:行者123 更新时间:2023-12-04 02:49:15 24 4
gpt4 key购买 nike

我正在尝试处理没有参数和管道数据传递给 Perl 脚本的可能性。我假设如果没有参数,则输入通过 STDIN 进行管道传输。但是,如果用户不提供任何参数并且不通过管道将任何内容传递给脚本,它将尝试获取键盘输入。我的目标是提供错误消息。

不幸的是,select()不可移植到某些非 POSIX 系统。
有没有另一种方法可以最大程度地实现这一点?

最佳答案

Perl 带有 -t file-test 操作符,它告诉你一个特定的文件句柄是否对 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不会是一个可靠的选择,因为有时您正在从一个进程中读取,但该进程尚未开始写入。

祝一切顺利,

保罗

关于perl - 如何在不使用 select 的情况下检查(查看)Perl 中管道数据的 STDIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/518992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com