На этом шаге мы приведем текст сценария с использованием данного модуля.
Модуль CGI, как мы отметили на предыдущем шаге, содержит большой набор методов. Документация, входящая в состав самого модуля, достаточно подробно описывает его компоненты. Чтобы получить представление о работе модуля CGI, создадим с его помощью небольшой сценарий. Для этого вернемся к рассмотрению формы из примера 150 шага.
Будем для определенности использовать традиционный процедурно-ориентированный интерфейс. Рассмотрим следующий сценарий.
#!/usr/bin/perl
use CGI qw(:standard);
print header;
print start_html('Пример формы'),
h2('Регистрационная страница Клуба любителей фантастики'),
'Заполнив анкету, вы сможете пользоваться нашей электронной
библиотекой.',
br,
start_form,
"Введите регистрационное имя:",textfield('regname'),
p,
"Введите пароль: ", password_field(-name=>'password1',
-maxlength=>'8'),
p,
"Подтвердите пароль: ", password_field(-name=>'password2',
-maxlength=>'8'),
p,
"Ваш возраст",
p,
radio_group(-name=>'age',
-value=>['lt20','20_30','30_50','gt50'],
-default=>'lt20',
-labels=>{'lt20'=>'до 20','20_30'=>'20-30',
'30_50'=>'30-50','gt50'=>'старше 50'}),
br,br,
"На каких языках читаете:",
checkbox_group(-name=>'language',
-values=>
['русский','английский','французский','немецкий'],
-defaults=>['русский']),
br,br,
"Какой формат данных является для Вас предпочтительным ",
br,
popup_menu(-name=>'type',
-values=>['Plain text','PostScript','PDF']),
br,br,
"Ваши любимые авторы:",
br,
textarea(-name=>'wish', -cols=>40, -rows=>3),
br,
submit (-name=>'OK'), reset (-name=>'Отменить'),
end_form,
hr;
if (param())
{
print
"Ваше имя: ",em(param('regname')),
p,
"Ваш возраст: ", em(param('age')),
p,
"Вы читаете на языках: ",em(join(", ",param('language'))),
p,
"Предпочтительный формат данных для Вас: ",em(param('type')),
p,
"Ваши любимые авторы: ", em(join(", ",param('wish'))),
hr;
}
print end_html;
Обсудим приведенный текст. Директива use, как мы отметили выше, осуществляет импорт стандартного набора функций модуля CGI.pm в пространство имен вызывающего пакета. В самом сценарии на месте тэгов исходного HTML-кода стоят обращения к функциям модуля: каждому тэгу соответствует вызов функции. Вызов функции модуля CGI можно осуществлять двумя способами:
print textfield('regname','начальное значение',50,80);
print textfield(-name=>'regname', -default=>'начальное значение', -size=>50, -maxlength=>80) ;
Обработка позиционного параметра внутри функции зависит от его места в списке параметров. Обработка именованного параметра не зависит от его места в списке параметров. Функции модуля CGI могут иметь большое число параметров, порядок следования которых трудно запомнить, поэтому в этом модуле была реализована возможность вызова функций с именованными параметрами. Кроме того, применение именованных параметров делает текст программы более понятным. В тексте примера функции вызываются с именованными параметрами, если параметров больше одного.
На следующем шаге мы рассмотрим функции, использованные в сценарии.