Интерпретатор Perl содержит стандартный модуль CGI.pm. Пакет CGI.pm поддерживает как простой функционально-ориентированный интерфейс, так и объектно-ориентированный интерфейс.
Объектно-ориентированное программирование: создают с помощью CGI.pm объекты CGI, и вызывают различные методы этих объектов. Существуют методы, соответствующие практически всем основным тегам HTML, и при их вызове создается нужный тег с указанными атрибутами. Все они могут получать именованные параметры(за исключением методов, требующих один аргумент), иными словами, требуется указать не только значение атрибута HTML, но и его имя.
Начало HTML-документа. Вначале надо создать CGI объект, затем с помощью метода header этого объекта — HTTP-заголовок. Заголовок можно сформировать и самостоятельно, например, командой print. Метод start_html начинает сам документ HTML. Этот метод создает секцию <HEAD>,а также позволяет указать некоторые атрибуты <BODY>, как-то: цвет для изображения фона и ссылок. Чтобы результаты работы методов header и start_html попали на страницу, необходимо использовать функцию print:
#! /usr/local/bin/perl
$со = new CGI, print $co->header(-charset=>'windows-1251', -lang=>'ru'),
$co->start_html (-title => 'CGI Example', -author => 'Andrew',
-meta => {'keywords'=>'CGI Perl'}, -BGCOLOR => 'white', -LINK => 'red')
Создаем заголовки HTML. После создания шапки CGI-методы типа h1, h2, h3 и др. помогут создать заголовки, соответствующие тегам <Н1>, <Н2>, <НЗ> и т. д.
print $co->h1('Here is the Survey!,'),
$co->h2('Please fill out survey...')
Центрируем элементы. Чтобы центрировать текст с помощью тегов <CENTER>, используется CGI-метод center.
print $co->center($co->h1('Here is the Survey!')),
Создаем маркированный список. CGI-методы ul и li создают несортированный маркированный список (теги <UL> и <LI> соответственно).
|
print $co->p, $co->ul($co->li('Fame'), $co->li('Fortune '), $co->li('Fun'),)
Создаем гиперссылку. Гиперссылки помещаются на страницу CGI-методом а:
print "Гиперсыылка: ", $co->a({href=>"https://www. cpan.org/"}, "CPAN"), ". "
Создаем горизонтальную полосу. Для создания горизонтальной линии (метка <HR>) используется CGI-метод hr: print $co->hr
Создаем HTML-форму. Элементы управления HTML группируются в формы. Для создания формы используется GGI-метод startform. После нажатия кнопки Submit данные из элементов управления должны быть прочитаны и переданы сценарию, формирующему сводку данных. URL этого сценария указывается в атрибуте action формы:
print $co->startform(-method=>'POST', -action=>'https://www.yourself.com/user/cgi/cgi2.pl')
Все последующие элементы управления будут включены в форму, потому что метод startform генерирует тег <FORM>.
Если startform вызывается без аргументов, кнопка Submit возвращает введенные данные той же форме.
Работаем с текстовыми полями. Для создания текстового поля, позволяющего вводить текст, используется CGI-метод textfleld: "Please enter your name: ", $co->textfield('text')
Работаем с текстовыми областями. Текстовая область может содержать несколько строк текста. В cgil.pl создается текстовая область textarea:
print $co-> textarea (
-name => 'textarea', -default => 'No opinion', -rows => 10, -columns => 60)
Работаем с кнопками с независимой фиксацией. Кнопки с независимой фиксацией (checkbuttons) обычно объединяются в группу, что позволяет возвращать имена выбранных элементов управления в одном списке. С помощью CGI-метода checkbox_group создается такая группа.
print $co->checkbox_group(
-name => 'checkboxes', #имя
-values => ['Shampoo', 'Toothpaste', 'Bread', 'Cruise missiles'], #подписи
|
-defaults => ['Bread', 'Cruise missiles']) #пункты по умолчанию
Работаем со списками. Список с готовыми значениями можно прокрутить в случае, когда невозможно одновременно вывести па экран все его строки. Этот элемент управления создается CGI-методом scrolling_list.
print $co->scrolling_list('list', #имя
['Highest', 'High', 'Medium', 'Low'], 'High',)#строки, по умолчанию выбрано ‘High’
Работаем с кнопками с зависимой фиксацией. Кнопки с зависимой фиксацией (radiobuttons) позволяют сделать однозначный выбор из нескольких значений.
$labels{'1'} = 'Sunday'; $labels{'2'} = 'Monday'; $labels{'3'} = 'Tuesday';
$labels{'4'} = 'Wednesday'; $labels{'5' } = 'Thursday', $labels{'6'} = 'Friday';
$labels{'7'} = 'Saturday';
print $co->radio_group (
-name->' radios', # объединяются в группу 'radios'
-values=>['1', '2', '3', '4', '5', '6', '7'], # получают значения от '1' до '7'
-default=>'1',
-labels=>\%labels) # метки прикрепляются к ним с помощью хэша %labels
Работаем с раскрывающимся списком. В HTML раскрывающийся список представляет собой набор элементов, который пользователь может открыть нажатием кнопки, обычно сопровождающийся изображением стрелки вниз. Пользователь может выбрать элемент списка, а вы - определить, на чем он остановился. Элементы задаются при помощи метода popup_menu:
print $co->popup_menu (
-name => 'popupmenu',
-values => ['Very much', 'A lot','Not so much', 'None'])
Работаем со скрытыми полями данных. Данные, хранящиеся в скрытом поле на Web-странице, невидимы для пользователя. (Это удобно, когда сценарий ожидает получить некоторые неизменные сведения о странице.) Такие поля создаются следующим образом:
print $co->hidden(-name=>'hiddendata', -default=>'Rosebud'),
Создаем кнопки отмены и подтверждения. Чтобы отправить на сервер данные формы, пользователь должен нажать кнопку Submit. Она создается CGI-методом submit. Аналогично, кнопка Reset, которая очищает данные формы, создается методом reset.
|
print $co->center(
$co-> submit(-value=>'Отправить'),
$co->reset(-value=>'Отмена'))
Закрываем HTML-форму. Все элементы управления, описанные ранее, являются частью одной формы анкеты, созданной в cgil.pl. Для открытия формы использовался метод startform, а для ее закрытия — endform: print $co->endform,
Закрываем HTML-документ. Чтобы завершить работу с HTML-документом, используйте метод end_html, который выводит теги </BODY></HTML>. Вот как заканчивается страница с анкетой в сценарии cgil.pl: print $co->end_html;
Чтение данных из элементов управления HTML. Когда пользователь нажмет на кнопку Submit, броузер отправит данные формы сценарию cgi2.pl; CGI-метод param в нем как раз и предназначен для чтения данных. Достаточно передать имя, присвоенное текстовому полю, а вывод выполняется следующим образом:
print "Your name is: ", $co->em($co->param('text')), ".";
Метод em создает метку <ЕМ>, которая большинством броузеров воспринимается как указание на переход к курсивному начертанию.
Аналогично читаются данные из эл-тов управления: textarea, list, radios, popupmenu, hiddendata
Кнопки с независимой фиксацией: в данном случае param возвращает список имен помеченных кнопок, функция join, объединяет элементы списка в строку:
print "You use these products: ", $co->em(join(", ", $co->param('checkboxes'))), “.”;
Функционально-ориентированное CGI-программирование.
#!/usr/local/bin/perl
use CGI qw/:standard/;
print header(-charset=>'windows-1251', -lang=>'ru'),
start_html(' CGI Functions Example'),h1('CGI Functions Example'),
start_form, "Please enter your name: ", textfield('text'), p,
submit(-value=>'Отправить'), reset(-value=>'Отмена'), end_form,hr;
if(param()) {print "Your name is: ",em(param('text')), hr;}
print end_html;
Код генерирует текстовое поле с предложением ввести имя пользователя. После нажатия на кнопку Submit данные возвращаются к тому же CGI-сценарию, который с помощью функции рагаm выводит введенное имя в нижней части Web-страницы