在不带Term :: ReadKey的Perl中丢弃STDIN上的多余换行符

时间:2018-07-19 18:39:25

标签: perl

我一直在研究搜索引擎结果和Stack Overflow以解决此问题,并且尝试了十几种不同的“解决方案”,但都无济于事。由于我的环境的限制,我无法使用大多数解决方案所建议的Term :: ReadKey。

现有的Perl脚本可以:

my $mode1=<STDIN>;
chomp($mode1);

,但是许多提示不评估输入-例如,用户可以输入任意字符串-但是脚本仅截取输入,然后忽略内容。有几个提示要求输入,但不输入输入就按[ENTER]将应用默认值。

如果用户在脚本处于阻止功能时不耐烦,或者通过按[ENTER]查看终端是否响应,则当阻止功能结束时,这些换行符会不适当地使脚本前进。我不想依靠用户培训来代替自动化,而且似乎必须有一个简单的显而易见的解决方案,但我似乎无法深入探讨。

这最初不是我的脚本,它的作者承认起初是很简单的。

2 个答案:

答案 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
}
...