如何更新屏幕上的值而不在Perl中清除它?

时间:2009-09-23 15:13:54

标签: perl

我想在屏幕上显示一组值,并每隔5秒更新一次该值。我不想清除屏幕。

例如:

小时:1

分钟:30

秒:45

此处,值应相应更改。

我应该如何在Perl中做到这一点?

此致 阿南丹

3 个答案:

答案 0 :(得分:13)

您是否在谈论如何更好地控制屏幕上的内容?那么您可能想查看Term::Cap模块。

一个穷人在一行上执行此操作的方法是使用\r来覆盖同一行。

while ($t>0) {
    # note no new line at the end of printf statement
    printf "\rHours: %d  Minutes: %d  Seconds: %d     ", $t/3600, ($t/60)%60, $t/60;
    sleep 5;
    $t -= 5;
}

编辑以下是适用于我的系统的内容。您终端的功能可能会有所不同。

require Term::Cap;
$terminal = Tgetent Term::Cap { TERM => cygwin, OSPEED => 9600 };
$terminal->Trequire("up");  # move cursor up
$UP = $terminal->Tputs("up");
$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;
}

答案 1 :(得分:11)

对于这类事情,我喜欢使用Curses。它也不适合Perl。 :)

答案 2 :(得分:-4)

这样的事情:

use Term::ANSIScreen qw(cls);
while(1) {
    cls;

    print "....";

    sleep 5;
}

可以在此question中找到“cls”的替代品。