#!C:/usr/local/apache/Perl/bin/perl.exe
# в первой строке CGI-программы указан путь к perl
use CGI qw/:standard/; # применяем стандартные средства CGI
print # выводим в выходной поток
header(-charset=>'windows-1251'), # в кодировке CP1251:
start_html('Гостевая книга'), # шапку страницы,
h3('Здесь Вы можете оставить свой отзыв'),# заголовок,
start_form, # форму, в ней
"Имя: ", # надпись,
textfield(-name=>'nick', size=>8), p, # поле ввода,
"Э-почта: ", # надпись,
textfield(-name=>'email', size=>32), p, # поле ввода,
"Комментарий: ", p, # надпись,
textarea(-name=>'comments', # область ввода
-rows=>5, -columns=>50), p, # из 5 строк на 50 колонок,
submit('Отправить'), # кнопку,
end_form, # конец формы
hr, "\n"; # и горизонтальную черту
# далее проверяем, были ли присланы данные формы
if (param) { # если присланы данные - параметры формы
print # выводим:
a({href=>"mailto:".param('email')}, # ссылку на E-mail
param('nick')), # и имя, а также
" пишет: ", p, param('comments'), p, # комментарий
hr,"\n"; # и горизонтальную черту
}
print end_html; # оформляем конец страницы
При первом выполнении эта программа выводит пустую HTML-форму, а после того как форма заполнена и данные формы отправлены на сервер, на странице после формы выводится последний полученный комментарий. В результате будет сгенерирована web-страница, приведенная на рис. 18.1.
Рис. 18.1.Результат выполнения CGI-программы
Отлично протестированные подпрограммы стандартной библиотеки CGI выполняют все действия по созданию правильно оформленных web-страниц. Они скрывают от программиста трудности и тонкости при преобразовании параметров и обработке данных форм. Web-страницы можно формировать программно без использования разметки на языке HTML. Библиотека CGI также имеет объектно-ориентированный интерфейс со всеми необходимыми классами и методами для работы с объектами HTTP-запросов в CGI-программах.
Дальнейшим развитием CGI стали серверные технологии, в которых в шаблон HTML-документа включаются исполняемые фрагменты, написанные на встроенном языке программирования - C#, Java, PHP, Perl, Visual Basic или специальных языках шаблонов. На Perl написано немало систем для работы с шаблонами (templating system): от модулей, использующих несложную подстановку, до изощренных платформ программирования (application framework) для web-сервера. Perl в подобных системах применяется для обработки шаблонов (например, HTML::Template, Text::Template, Template Toolkit) и динамической генерации на основе шаблонов. Во многих системах (например, Apache::ASP, AxKit, Embperl, Mason, Apache::XPP) Perl применяется как встроенный язык, используемый для программирования действий в шаблонах. Все эти системы можно загрузить с сайта CPAN и установить обычным образом. (Подробнее об установке модулей речь шла в лекции 13.) Для работы с этими системами под ОС MS Windows проще всего загрузить с сайта perl.apache.org дистрибутив Perl, в состав которого входит сервер Apache с mod_perl и многие из перечисленных библиотек. Каждая из систем реализует оригинальный подход и обладает интересными возможностями, но мы остановимся подробнее на той из них, которая реализует тот же подход, что и в других распространенных системах программирования на основе шаблонов: ASP, JSP и PHP.
Система разработки web-сайтов Apache::ASP предлагает кросс-платформенные средства, аналогичные используемым в системе программирования ActiveState PerlScript для web-сервера Microsoft IIS. В этом подходе сочетаются естественное представление HTML-документа и возможность использовать богатые возможности языка программирования. В шаблоне HTML-страницы между тегами <% и %> располагаются фрагменты программы на языке Perl, которые выполняются при обработке запроса на страницу. Результат выполнения этих фрагментов включается в результирующую страницу, которая отсылается клиенту. Если переписать пример с гостевой книгой, используя классы из состава Apache::ASP, то он будет выглядеть так:
<html>
<head> <!-- шапка HTML-страницы -->
<meta http-equiv="content-type"
content="text/html; charset=windows-1251">
<title>Гостевая книга</title>
</head>
<body> <!-- тело HTML-страницы -->
<h3>Здесь Вы можете оставить свой отзыв</h3>
<form method="POST"> <!-- начало HTML-формы -->
<br/>Имя: <!-- 1-е поле формы -->
<input name="nick" type="text" size="8"
value="<%=$Request->Form('nick')%>"/>
<br/>Э-почта: <!-- 2-е поле формы -->
<input name="email" type="text" size="32"