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;