【问题标题】:Perl. How can I make output disappear after several seconds?珀尔。几秒钟后如何使输出消失?
【发布时间】:2014-01-10 00:26:36
【问题描述】:

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

/> 13 + 7 ?

有什么方法可以让这个输出在 2 秒后消失吗?

..感谢任何建议

【问题讨论】:

标签: perl shell prompt


【解决方案1】:

我认为你要求的几件事结合起来:

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";
}

【讨论】:

    【解决方案2】:

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

    当您准备好使用更高级的解决方案时,您可以查看Term::ReadKey(这样您就不必在输入答案后按Enter)或类似@987654327 @ 可以更好地控制终端上任意位置的写入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多