Perl的。几秒钟后如何让输出消失?

时间:2013-12-21 04:45:51

标签: perl shell prompt

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

/> 13 + 7 ?

是否可以使这个输出在2秒后消失?

..感谢'任何建议

2 个答案:

答案 0 :(得分:3)

我想要结合一些事情,我想:

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 "\010" x length($question);
    print " " x length($question);
    print "too late\n";
}

答案 1 :(得分:2)

select上使用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;
}

当您准备好使用更高级的解决方案时,您可以查看Term::ReadKey(因此您无需在输入答案后点击 Enter )或类似的内容Curses可以更好地控制对终端上任意位置的写入。