На этом шаге мы дадим общую характеристику модуля CGI.pm.
Пример, рассмотренный на предыдущих шагах, демонстрирует наивный подход, когда кажется, что все необходимые программы надо писать самостоятельно с самого начала. Но программирование CGI - это такая область, в которой Perl давно и активно применяется, и многое из того, что может потребоваться, уже давно кем-то написано. Надо только найти и использовать. Начиная с этого шага мы сделаем краткий обзор одного из таких готовых средств, предназначенных для поддержки разработки CGI-приложений.
Модуль CGI.pm, созданный Линкольном Штейном, входит в состав дистрибутивного комплекта Perl, начиная с версии 5.004, и его даже не нужно специально инсталлировать.
Этот модуль содержит большой набор функций для создания и обработки HTML-форм. Мы посвятили значительную часть предыдущих шагов изучению многочисленных тэгов, чтобы затем написать HTML-код для создания формы в рассмотренном примере. Модуль CGI позволяет сделать то же самое, но без использования HTML. С его помощью можно описать форму на языке Perl, используя вместо тэгов обращения к функциям модуля. В результате получится не документ HTML, а сценарий на языке Perl, который при вызове будет "на лету" генерировать HTML-форму и передавать серверу для отправки клиенту.
Модуль CGI является не просто модулем, а классом, что позволяет использовать преимущества объектно-ориентированного подхода. Модуль предоставляет пользователю на выбор два вида интерфейса с самим собой: процедурно-ориентированный и объектно-ориентированный.
При использовании процедурно-ориентированного способа работы с модулем CGI функции модуля нужно явным образом импортировать в пространство имен вызывающей программы, а затем обращаться к ним как обычно. В этом случае в вызывающей программе должны быть строки, аналогичные следующим:
#! /usr/bin/perl
use CGI qw/:standard/;
print header(),
start_html ('Пример формы') ,
h1 ('Пример формы'),
. . . .
Директива use импортирует в пространство имен вызывающей программы некоторый стандартный набор функций. Помимо него, существуют другие наборы функций модуля CGI. Их можно импортировать, указав имя соответствующего набора в списке импорта директивы use. Имена всех наборов можно просмотреть в файле CGI.pm, где они содержатся в хеш-массиве %EXPORT_TAGS.
Функции header(), start_html(), h1() являются функциями модуля CGI. Они будут рассмотрены в следующих шагах.
При использовании объектно-ориентированного интерфейса в директиве use вызывающей программы не нужно указывать список импортируемых имен функций. В этом случае взаимодействие с модулем CGI осуществляется через объект класса CGI, который нужно создать в вызывающей программе при помощи конструктора new(). Объектно-ориентированный вариант приведенного выше фрагмента выглядит следующим образом:
#! /usr/bin/perl
use CGI;
$query = new CGI;
print $query->header(),
$query->start_html('Пример формы'),
$query->h1('Пример формы'),
. . . .
На следующем шаге мы приведем пример CGI-сценария с использованием данного модуля.