div class="one_answers">
我提示用户输入正确答案,例如:
/> 13 + 7 ?
例如,有什么方法可以使此输出在 2 秒后消失?
..感谢您的任何建议<</p>
我认为,您要求将一些事情结合起来:
1)你如何擦除一行
2)你如何等待输入一段时间,然后放弃等待(即计时器)
以下代码将执行您想要的操作(还有其他方法可以完成上述两种任务,但下面显示了上述每个任务的一种方法):
use strict; use warnings;
use IO::Select;
my $stdin = IO::Select->new();
$stdin->add(*STDIN);
# always flush
$| = 1;
my $question = "/> 7 + 3 ? ";
print $question;
if ($stdin->can_read(2)) {
print "you entered: " . <STDIN>;
} else {
print " 10" x length($question);
print " " x length($question);
print "too laten";
}
在 STDIN
上使用 select
查看 2 秒内是否有任何输入。如果没有,则用回车符 ( r
) 或多个退格符 ( b
) 覆盖输出。
概念验证:
$| = 1; # needed because print calls don't always use a newline
$i = int(rand() * 10);
$j = int(rand() * 10);
$k = $i + $j;
print "What is $i + $j ? ";
$rin = '';
vec($rin, fileno(STDIN), 1) = 1;
$n = select $rout=$rin, undef, undef, 2.0;
if ($n) {
$answer = <STDIN>;
if ($answer == $k) {
print "You are right.n";
} else {
print "You are wrong. $i + $j is $kn";
}
} else {
print "b b" x 15;
print "nn";
print "Time's up!n";
sleep 1;
}
当您准备好使用更高级的解决方案时,您可能会查看Term::ReadKey
(这样您不必在输入答案后按 Enter 键)或类似 Curses
的东西来更好地控制写入终端上的任意位置。