【发布时间】:2011-11-28 00:09:59
【问题描述】:
有什么方法可以清除 Perl 中的 STDIN 缓冲区?我的程序的一部分有很长的输出(有足够的时间让某人输入几个字符),在输出之后我要求输入,但如果在输出过程中输入了字符,它们会“附加”到输入时输入的任何内容部分。这是我的问题的一个例子:
for(my $n = 0; $n < 70000; $n++){
print $n . "\n";
}
chomp(my $input = <STDIN>);
print $input . "\n";
输出将包括在该 for 循环的输出期间输入的任何字符。我怎么能禁用 STDIN 或刷新 STDIN 缓冲区(或任何其他方式不允许在调用它之前将额外字符插入 STDIN)?
【问题讨论】:
-
好的,我一直在寻找这个问题的答案 3 天了(不是每天的每个小时,但我会说每天至少 3 或 4 小时)但还没有找到一个答案,事实上我问过我的同事,他们也知道和使用 Perl,他们也不知道,所以我相信我付出的努力比你暗示的要多,除此之外,你呢?对如何做我的要求有任何想法吗?因为我已经浏览了您的链接,大约 3 天前,尝试以一种可以在逻辑上解决此问题的方式实现这些功能,但它没有工作。
-
use IO::Handle;STDIN->autoflush(1); -
谢谢你的回答,但是,这并没有解决问题,而且,我记得读过 autoflush 和 flush 只对输出有用,例如 STDERR 和 STDOUT,而不是输入。当我尝试你的建议时,我仍然得到我在 for 循环输出期间输入的字符以及我在 STDIN 输入的字符。
-
@JackManey:通常,“刷新”适用于输出,而不是输入。