珀尔.如何使输出在几秒钟后消失



我提示用户输入正确答案,例如:

/> 13 + 7 ?

例如,有什么方法可以使此输出在 2 秒后消失?

..感谢您的任何建议<</p>

div class="one_answers">

我认为,您要求将一些事情结合起来:

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 的东西来更好地控制写入终端上的任意位置。

最新更新