Anandan
Anandan

Reputation: 1013

How can I update values on the screen without clearing it in 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

Upvotes: 5

Views: 1639

Answers (3)

mob
mob

Reputation: 118605

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

Upvotes: 14

brian d foy
brian d foy

Reputation: 132812

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

Upvotes: 12

gugod
gugod

Reputation: 830

Something like this:

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

    print "....";

    sleep 5;
}

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

Upvotes: -4

Related Questions