С помощью Curses можно узнать,
use strict;
use Curses;
my Stimeout = 10;
if (@ARGV && $ARGV[O] =~ /~-(\d+\.?\d-)$/) <
Stimeout = $1;
shift,
die "usage: $0 [ -timeout ] end args\n" unless @ARGV;
initscr(); # Инициализировать экран
noecho();
cbreakO;
nodelay(1); # Чтобы функция getch() выполнялась без блокировки
$SIG{INT} = sub { done("0uch!") };
sub done { endwin(); print "@_\n"; exit; }
while (1) {
while ((my $key = getch()) ne ERR) { # Возможен ввод
done("See ya") if $key eq 'q' # нескольких символов
>
ray @data = '(@ARGV) 2>&1'; # Вывод+ошибки
for (my $i =0; $i < $LINES; $i++) {
addstr($i, 0, $data[$i] || ' ' x $COLS);
standout();
addstr($LINES-1, $COLS - 24, scalar localtime);
standend();
move(0,0);
refresh(); # Обновить экран
my (Sin, $out) = ('', '');
vec($in,fileno(STDIN),1) =1; # Искать символ в stdin select($out = $in,undef,undef,$timeout);# Ожидание }
С помощью Curses можно узнать, когда пользователь нажал клавишу со стрелкой или служебную клавишу (например, Ноте или Insert). Обычно это вызывает затруднения, поскольку эти клавиши кодируются несколькими байтами. С Curses все просто:
keypad(1); # Включить режим ввода
$key = getch(); # с цифровой клавиатуры
if ($key eq 'k' 11 # Режим vi
$key eq "\cP" || # Режим emacs
$key eq KEYJJP) # Стрелка
{
# Обработать клавишу }
Другие функции Curses позволяют читать текст в определенной позиции экрана, управлять выделением символов и даже работать в нескольких окнах.
Модуль perlmenu, также хранящийся на CPAN, построен на базе низкоуровневого модуля Curses. Он обеспечивает высокоуровневые операции с меню и экранными формами. Приведем пример экранной формы из поставки perlmenu:
540 Глава 15 • Пользовательские интерфейсы
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий