按下键时需要打开循环的Perl代码

时间:2013-07-15 04:33:17

标签: perl

我有一个执行的脚本,但我需要一个循环,告诉进程在用户运行不同的测试时睡眠20-30秒。

完成测试后,用户按 Enter 继续脚本停止的位置。如果在20-30秒的时间内未按下 Enter ,则脚本将在没有用户输入的情况下继续运行。

我尝试了以下代码,但它无限期地暂停了脚本 - 它在20秒后没有继续,但它也不接受 Enter

use Term::ReadKey;
ReadMode 4;
do {
    sleep 20; 
} until ( defined( $key = ReadKey(-1) ) );
ReadMode 0;

2 个答案:

答案 0 :(得分:1)

尝试使用while循环代替do{}

#!usr/bin/perl
use strict;
use warnings;
use Term::ReadKey;

ReadMode 4;    # Turn off controls keys
my $key;

while ( !defined( $key = ReadKey(-1) ) ) {
    print "No key yet\n";
    sleep 5;
}
print "Get key $key\n";

ReadMode 0;    # Reset tty mode before exiting

答案 1 :(得分:1)

以下是一些代码:

use Term::ReadKey;

ReadMode(4);
my $key;
my $wait = 20;

for (my $x = 0; $x < $wait; $x++) {
if (defined ($key = ReadKey(-1))) {
        print "key pressed\n";
        break;
    }
    print "waiting for key press\n";
    sleep(1);
}