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

前端 未结 3 1426
情深已故
情深已故 2020-12-17 03:52

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

相关标签:
3条回答
  • 2020-12-17 04:32

    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;
    }
    
    0 讨论(0)
  • 2020-12-17 04:36

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

    0 讨论(0)
  • 2020-12-17 04:39

    Something like this:

    use Term::ANSIScreen qw(cls);
    while(1) {
        cls;
    
        print "....";
    
        sleep 5;
    }
    

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

    0 讨论(0)
提交回复
热议问题