tags:

views:

174

answers:

3

Hi,

I want to display a set of values on screen and update that value every 5 seconds. I don't want to clear the screen.

eg:

hours: 1

mins : 30

sec: 45

here, values should change accordingly.

How should i do that in Perl?

Regards, Anandan

+10  A: 

Are you talking about getting more control over where things are printed on your screen? Then you probably want to check out the Term::Cap module.

A poor man's way to do this on one line is to use \r to keep overwriting the same line.

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;
}

EDIT Here's something that works on my system. Your terminal's capabilities may vary.

require Term::Cap;
$terminal = Tgetent Term::Cap { TERM => cygwin, OSPEED => 9600 };
$terminal->Trequire("ku");  # move cursor up
$UP = $terminal->Tputs("ku");
$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;
}
mobrule
Don't use \r in these cases. It's a logical character, not a specific bit pattern, so it's not always what you think it is. Specify it as the ASCII character you want instead.
brian d foy
A: 

Something like this:

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

    print "....";

    sleep 5;
}

Alternatives of "cls" can be found in this question.

gugod
quoting the OP: "I don't want to clear the screen."
innaM
+10  A: 

For this sort of thing I like to use Curses. It's just not for Perl, either. :)

brian d foy
thanks.. i think this solves my problem :)
Anandan