Perl。如何使输出在几秒钟后消失?

Perl。如何使输出在几秒钟后消失?,perl,shell,prompt,Perl,Shell,Prompt,我正在提示用户提供正确答案,例如: /> 13 + 7 ? 例如,是否有任何方法可以使该输出在2秒后消失 …谢谢你的建议我想你要求的是几件事的结合: 1) 如何删除一行 2) 如何等待输入一段时间,然后放弃等待(例如,计时器) 以下代码将执行您想要的操作(有其他方法可以完成上述两项任务,但下面显示了上述每项任务的一种方法): 使用严格;使用警告; 使用IO::Select; 我的$stdin=IO::选择->新建(); $stdin->add(\*stdin); #总是脸红 $| = 1

我正在提示用户提供正确答案,例如:

/> 13 + 7 ?
例如,是否有任何方法可以使该输出在2秒后消失


…谢谢你的建议

我想你要求的是几件事的结合:

1) 如何删除一行

2) 如何等待输入一段时间,然后放弃等待(例如,计时器)

以下代码将执行您想要的操作(有其他方法可以完成上述两项任务,但下面显示了上述每项任务的一种方法):

使用严格;使用警告;
使用IO::Select;
我的$stdin=IO::选择->新建();
$stdin->add(\*stdin);
#总是脸红
$| = 1;
我的$QUOTE=“/>7+3?”;
打印$问题;
如果($stdin->can_read(2)){
打印“您输入:”;
}否则{
打印“\010”x长度($问题);
打印“”x长度($问题);
打印“太晚了\n”;
}

使用
STDIN
上选择
,查看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 $k\n";
    }
} else {
    print "\b \b" x 15;
    print "\n\n";
    print "Time's up!\n";
    sleep 1;
}
$|=1;#需要,因为打印呼叫并不总是使用换行符
$i=int(rand()*10);
$j=int(兰特()*10);
$k=$i+$j;
打印“什么是$i+$j?”;
$rin='';
vec($rin,文件号(标准输入),1)=1;
$n=选择$rout=$rin,未定义,未定义,2.0;
如果(n美元){
$answer=;
如果($answer==$k){
打印“你是对的。\n”;
}否则{
打印“您错了。$i+$j是$k\n”;
}
}否则{
打印“\b\b”x 15;
打印“\n\n”;
打印“时间到了!\n”;
睡眠1;
}
当您准备好使用更高级的解决方案时,您可能可以签出
Term::ReadKey
(这样您在键入答案后就不必按Enter键)或类似于
Curses
的内容,以便对写入终端上的任意点进行更多控制

$| = 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 $k\n";
    }
} else {
    print "\b \b" x 15;
    print "\n\n";
    print "Time's up!\n";
    sleep 1;
}