Иллюстрированный самоучитель по Perl

CGI-сценарии

При использовании объектно-ориентированного интерфейса в директиве use вызывающей программы не нужно указывать список импортируемых имен функций. В этом случае взаимодействие с модулем CGI осуществляется через объект класса CGI, который нужно создать в вызывающей программе при помощи конструктора new (). Объектно-ориентированный вариант приведенного выше фрагмента выглядит следующим образом:

#!/usr/bin/perl
use CGI;
Squery = new CGI;
print $query › header(),
$query › start_html {'Пример формы'),
$query › hl ('Пример формы'),

Замечание
Функции модуля CGI.pm являются методами класса CGI. Для того чтобы их можно было вызывать и как функции, и как методы, синтаксис не требует в качестве обязательного первого параметра указывать объект класса CGI. Поэтому в качестве функций к ним можно обращаться обычным образом, а как к объектам – только используя форму $object › method ().

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

Будем для определенности использовать традиционный процедурно-ориентированный интерфейс. Рассмотрим следующий сценарий.

#!/usr/bin/perl
use CGI qw(:standard);
print header;
print start_html('Пример формы'),
h2('Регистрационная страница Клуба любителей фантастики'),
'Заполнив анкету, вы сможете пользоваться нашей электронной
"^библиотекой.',
br,
start_form,
"Введите регистрационное имя:",textfield('regname'),
P.
"Введите пароль: ", password_field(-name › 'passwordl',
-maxlength › '8'),
Р,
"Подтвердите пароль: ", password_field(-name › 'password2',
-maxlength › '8'),
Р/-
"Ваш возраст",
Р'
radio_group(-name › 'age',
-value › ['lt20','20_30', '30_50', 'gt50'],
-default › 'Lt20',
-labels › {'It20' › 'flo 20', I 20_30' › '20-30', 4> '30_50' › '30-50','gt50' › 'старше 50'}),
br,br,
"На каких языках читаете:",
checkbox_group(-name › 'language', 4> – values ›
4>
['русский', 'английский','французский', 'немецкий'],
^ – defaults › ['русский']), br,br,
"Какой формат данных является для Вас предпочтительным ", bг, popup_menu(-name › 'type',
-values › ['Plain text','PostScript','РОГ']), br,br, \
N
"Ваши любимые авторы:", x – ~-_.
br,
textarea(-name › 'wish', – cols › 40, – rpws › 3),
br,
subrai t{-name › 'OK'), reset{-name › 'Отменить'),
end_form,
hr;
if (paramO) { print
"Ваше имя: ",em(param('regname')),
P,
"Ваш возраст: ", em(param('age')),
P, '
J
"Вычитаете на языках: ",em(join(", ",param('language'))),
P,
"Предпочтительный формат данных для Вас: ",em(param ('type')),
P,
"Ваши любимые авторы: ", em(join(", ",param('wish 1))),
hr; } print end_html;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.