2013-07-15 35 views
1

我有一個被執行的腳本,但我需要一個循環來告訴進程在用戶運行不同的測試時睡眠20-30秒。當按下按鍵時需要打開循環的Perl代碼

測試完成後,用戶按輸入以繼續腳本停止的位置。如果輸入未在20-30秒內按下,腳本將繼續運行而無需用戶輸入。

我嘗試了下面的代碼,但它無限期地暫停腳本 - 它不會在20秒後繼續,但它也不會接受輸入

use Term::ReadKey; 
ReadMode 4; 
do { 
    sleep 20; 
} until (defined($key = ReadKey(-1))); 
ReadMode 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 
+0

感謝試圖提供的代碼,並且輸出保持張貼 '無鑰匙然而,' 每5秒,即使當我按任意鍵時,輸出仍然保持循環,然後'No Key Yet',並且不跳轉到下一部分。似乎它沒有檢測到擊鍵。 – user2574644

+0

當我運行此代碼時,它會進入循環並在按下某個鍵後退出。正如預期的那樣。你使用哪個Perl?我在Ubuntu 13.04 64bit – Demnogonis

+0

上的Perl 5.14上測試了這一點。我也在使用Windows,並試圖從HTML頁面獲取擊鍵(如果有幫助的話)。 – user2574644

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); 
} 
相關問題