Как я могу обновить значения на экране, не очищая его в 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" можно найти в этом вопросе.