Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I update values on the screen without clearing it in Perl?

Tags:

perl

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

like image 850
Anandan Avatar asked Sep 23 '09 15:09

Anandan


1 Answers

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("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;
}
like image 83
mob Avatar answered Oct 10 '22 09:10

mob