1

実行されるスクリプトがありますが、ユーザーが別のテストを実行している間、プロセスに 20 ~ 30 秒間スリープするように指示するループが必要です。

そのテストが完了すると、ユーザーは を押しEnterて、スクリプトが中断された場所から続行します。Enter20 ~ 30 秒以内に が押されない場合、スクリプトはユーザーの入力なしで実行され続けます。

次のコードを試してみましたが、スクリプトが無期限に一時停止します。20 秒後には続行されませんが、Enter.

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

2 に答える 2

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
于 2013-07-15T05:07:19.090 に答える
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);
}
于 2014-01-28T21:01:47.580 に答える