Perl - специальный справочник


           

Приложение использует два файла данных


Приложение использует два файла данных для хранения двух последних реплик. (Я использую отдельные текстовые файлы для каждой реплики, чтобы сделать хранилище текстов более защищенным с точки зрения блокировки файлов, а приложение — более надежным.) При желании можно изменить код и выводить на экран больше реплик.

Устанавливаем период обновления HTML

Наверняка вам захочется изменить по крайней мере одно — это пятисекундный период обновления, используемый данным приложением. Для этого в строке файла chat1.cgi; просто впишите требуемое количество секунд:

"<meta HTTP-EQUIV=\"refresh\" CONTENT=\"5\">",

Очищаем обновленные элементы HTML

Надо сделать еще одно замечание. Оно касается CGI.pm. Когда пользователь посылает форму, элементы управления которой содержат данные, а ваш сценарий возвращает ее без изменений, CGI.pm копирует данные из старых элементов управления в новые. Другими словами, предположим, что форма включает текстовую область:

$co->textarea(

-name=>'textarea',

-default=>'',

-rows=>4,

-columns=>40)

Если пользователь вводит текст, а затем передает его сценарию, тот может прочитать данные стандартными CGI-методами. Однако, когда вы возвращаете Web-страницу с аналогичной формой, CGI.pm восстанавливает в текстовой области исходный текст (даже если в качестве текста по умолчанию задана пустая строка). В приложении результат будет таков: когда пользователь отсылает набранный текст, он воспринимается сценарием, но не исчезает из текстовой области. Чтобы CGI.pm обновлял элементы управления значениями по умолчанию, атрибут -override

нужно установить в значение истина:

$co->textarea(

-name=>'textarea',

-default=>'',

-override=>1,

-rows=>4,

-columns=>40

)

Теперь текстовая область будет очищаться после прочтения комментария, к чему вы и стремились.

Листинг 21.1. chat.htm

<HTML>

<HEAD>

<TITLE>Chat</TITLE>

<FRAMESET ROWS="150,*">

<NOFRAMES>Sorry, you need frames to use chat.</NOFRAMES>


Содержание  Назад  Вперед