我一直在研究搜索引擎结果和Stack Overflow以解决此问题,并且尝试了十几种不同的“解决方案”,但都无济于事。由于我的环境的限制,我无法使用大多数解决方案所建议的Term :: ReadKey。
现有的Perl脚本可以:
my $mode1=<STDIN>;
chomp($mode1);
,但是许多提示不评估输入-例如,用户可以输入任意字符串-但是脚本仅截取输入,然后忽略内容。有几个提示要求输入,但不输入输入就按[ENTER]将应用默认值。
如果用户在脚本处于阻止功能时不耐烦,或者通过按[ENTER]查看终端是否响应,则当阻止功能结束时,这些换行符会不适当地使脚本前进。我不想依靠用户培训来代替自动化,而且似乎必须有一个简单的显而易见的解决方案,但我似乎无法深入探讨。
这最初不是我的脚本,它的作者承认起初是很简单的。
答案 0 :(得分:4)
4-argument select
function有点晦涩难懂,但是在很多情况下,它可以告诉您输入文件句柄上是否有未读的输入。当您的程序需要提示用户输入时,可以使用[gamemode=!adventure]
来查看select
上是否有任何多余的输入,并在再次提示用户并要求其他输入之前将其清除。输入。
STDIN
答案 1 :(得分:0)
关闭STDIN
的简便解决方案吗?
print "Are you sick of answering questions yet? [y/N] ";
$ans = <STDIN>;
if ($ans =~ /^y/i) {
close STDIN;
# from now on, further calls to <STDIN> will immediately
# return undef and will assign default values
}
...