Как я могу обновить значения на экране, не очищая его в Perl?

Я хочу отобразить набор значений на экране и обновлять это значение каждые 5 секунд. Я не хочу очищать экран.

например:

часов: 1

мин: 30

сек: 45

здесь значения должны измениться соответственно.

Как мне это сделать в Perl?

С уважением, Анандан

3 ответа

Решение

Для такого рода вещей мне нравится использовать Curses. Это просто не для Perl.:)

Вы говорите о получении большего контроля над тем, где вещи печатаются на вашем экране? Тогда вы, вероятно, захотите проверить модуль 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;
}

Что-то вроде этого:

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

    print "....";

    sleep 5;
}

Альтернативы "cls" можно найти в этом вопросе.

Другие вопросы по тегам