2011-11-15 7 views
2
#!/usr/bin/env perl 
use warnings; 
use 5.014; 
use Term::Cap; 
use POSIX; 

my $termios = new POSIX::Termios; 
$termios->getattr; 
my $ospeed = $termios->getospeed; 

my $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed }; 
$terminal->Trequire("ku"); # move cursor up 
my $UP = $terminal->Tputs("ku"); 
my $t = 500; 
while ($t > 0) { 
    printf "Hour: %d \n", $t/3600; 
    printf "Minute: %d \n", ($t/60)%60; 
    printf "Second: %d \n", $t%60; 
    print $UP,$UP,$UP; 
    sleep 5; 
    $t -= 5; 
} 

を動作しません。私は、この(ここで見つける:How can I update values on the screen without clearing it in Perl?)をしようとすると、私はこの出力を得る:ターム::キャップ:「アップキー」は

Hour: 0  
Minute: 8  
Second: 20  
AAAHour: 0  
Minute: 8  
Second: 15  
AAAHour: 0  
Minute: 8  
Second: 10  
AAAHour: 0  
Minute: 8  
Second: 5 

key-upがないことを、この平均値をい私の端末で作業しますか?

+0

キーアップコードは問題ありませんが、何らかの理由でストリームを画面に配置すると予想されます。コードを解釈するために他端には何もない。代わりにCursesを使用してください。 – daxim

+1

@daxim、すべてCursesは、Term :: Capと同じ制御コードを送信します。これは単なる上位レベルのライブラリです。本当の問題は彼が間違ったコードを送っていることです。 – cjm

答えて

4

あなたはkuの能力を誤解しました。これは、ユーザーが端末の上向き矢印キーを押したときに生成される文字シーケンスです。カーソルを実際に画面上に移動するには、up機能を印刷します。 (それがあなたの問題とは何の関係もありませんでしたが、また、それは、間接的なオブジェクト構文を避けるのがベストです。)

は、ここで修正したバージョンです:

#!/usr/bin/env perl 
use warnings; 
use 5.014; 
use Term::Cap; 
use POSIX; 

my $termios = POSIX::Termios->new; 
$termios->getattr; 
my $ospeed = $termios->getospeed; 

my $terminal = Term::Cap->Tgetent({ TERM => undef, OSPEED => $ospeed }); 
$terminal->Trequire("up"); # move cursor up 
my $UP = $terminal->Tputs("up"); 

my $t = 500; 
while ($t > 0) { 
    printf "Hour: %d \n", $t/3600; 
    printf "Minute: %d \n", ($t/60)%60; 
    printf "Second: %d \n", $t%60; 
    print $UP,$UP,$UP; 
    sleep 5; 
    $t -= 5; 
} 

あなたはTermcap manual役に立つかもしれません。 all the capabilitiesの意味を説明しています。

関連する問題