Российский государственный гуманитарный университет
Опубликован: 15.08.2003 | Доступ: свободный | Студентов: 6495 / 1481 | Оценка: 3.91 / 3.79 | Длительность: 06:55:00
Лекция 3:

Введение в программирование на Perl

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Аннотация: В этой лекции подробно разбираются особенности программирования CGI-скриптов на языке Perl. Определяются правила вызова скрипта, передачи ему данных и получение результатов работы скрипта для дальнейшего использования в HTTP-обмене и генерации HTML-страниц. Разбираются причины популярности Perl-скриптов среди Web-программистов.

Язык программирования Perl является основным средством разработки CGI-скриптов для Web-узлов. Его не применяют только там, где требуется высокая эффективность кода и нет стандартных библиотек для Perl.

Perl как язык разработки скриптов имеет ряд преимуществ. Перечислим их в порядке значимости:

  • независимость от программно-аппаратной платформы;
  • мощные средства разбора строк;
  • простота работы с переменными окружения ;
  • простота работы со входными и выходными стандартными потоками;
  • возможность чтения заданного числа символов из входного потока;
  • хешированные таблицы;
  • возможность организации конвейеров;
  • библиотеки TCP/IP-обмена;
  • множество стандартных библиотек прикладных программ.

Все это делает программное обеспечение, написанное на Perl, мобильным, а разработку программ — быстрой и простой.

Структура Perl-программы

У программы на языке Perl нет жестко заданной структуры. Точнее сказать, программист не обязан ее соблюдать. Если же он захочет, чтобы интерпретатор контролировал объявление и использование переменных и конструкций языка, то при помощи класса strict он может такой контроль установить.

Программа на Perl состоит из операторов языка, которые должны заканчиваться символом ";". Например:

print "Привет, Perl.";

В общем случае операторы делятся на простые и составные. Простой оператор — это оператор print, например, а составной — while():

while() {s/</&lt;/g; s/>/&gt;/g; print $_;};

Программа на Perl исполняется интерпретатором Perl. Есть и компиляторы с этого языка, но они используются реже. При программировании CGI-скриптов в Unix интерпретатор вызывается из того же файла, который содержит программу, например:

#!/usr/local/bin/perl
print "Привет, Perl.";

В данном случае первая строка — это вызов интерпретатора с указанием полного пути к нему от корневого каталога файловой системы.

Вообще говоря, символ "#" — это символ начала комментария в Perl. Последовательность символов от символа "#" до конца строки рассматривается как комментарий. Часто в качестве комментария используют целые строки. В этом случае символ "#" ставится в первой позиции строки:

#!/usr/local/bin/perl
#
#Печатаем HTML-заголовок
#
print "Content-type: text/html\n\n";
#
#Содержание документа
#
print "Perl и CGI.";

Данный пример демонстрирует не только использование комментариев, но еще и формирование HTTP-заголовка. Без этого заголовка система выдаст сообщение о внутренней ошибке сервера, а в файле журнала ошибок появится запись о неправильном заголовке.

В последнее время основным рабочим местом авторов HTML-страниц и CGI-скриптов стали системы на платформе Windows. Как известно, конец строки в Windows и в Unix обозначается разными последовательностями неотображаемых символов. Если автор использует текстовый редактор в Windows, а потом как binary копирует файл в Unix, то эти символы передаются. Сервер начинает сообщать об ошибках, которые автору не видны. В таком случае можно сделать следующее: либо копировать программы как char, тогда происходит перекодировка, либо использовать "умные" текстовые редакторы.

Удобна также и Samba, которая позволяет редактировать "по месту" из Windows в Unix.

Стандартный поток вывода

Основная цель создания CGI-скрипта — обработка данных запроса пользователя и формирование отклика сервера на этот запрос. Можно рассматривать и другие задачи, которые позволяют решать CGI-скрипты, но эта задача — главная. Скрипт должен формировать не просто отклик, а HTTP-отклик. Это означает, что он должен сформировать заголовок и тело HTTP-сообщения, которые отделяются друг от друга пустой строкой.

Проще всего реализовать такой отклик с помощью команды print:

#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<HTML><HEAD></HEAD><BODY>";
print "<H1>Perl и CGI.</H1>";
print "</BODY></HTML>";

Первая строчка определяет заголовок HTTP-отклика и пустую строку (два символа "\n\n"). Остальные операторы print формируют тело сообщения. Оператор print пишет в стандартный вывод список своих аргументов. Вообще говоря, print можно использовать для вывода данных в любой файл. Если имя файла не указано, то вывод осуществляется в стандартный поток вывода.

Переменные окружения

Скрипт порождается сервером в некоторой операционной среде. Эта среда называется окружением (environment). Частью окружения являются так называемые переменные окружения. При вызове скрипта их порождает и присваивает им значения HTTP-сервер. Список переменных определен спецификацией Common Gateway Interface.

В Perl существует встроенный системный массив переменных окружения   %ENV. Символ "%" перед именем массива означает, что это массив ассоциативный, т.е. значение элемента массива может быть выбрано путем указания ключа, с которым оно связано. Например, нужно определить метод доступа к скрипту:

#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
print "REQUEST_METHOD:$ENV{REQUEST_METHOD}";

В данном контексте символ "$" перед именем массива не должен вводить в заблуждение. Обращение происходит к элементу ассоциативного массива. Это скаляр, поэтому и применяется символ "$". Ключ, по которому выбирается значение, указан в фигурных скобках.

Очень полезен скрипт распечатки всех переменных окружения, которые переданы скрипту ( perlenv2.htm ). Обычно этот отчет получают при отладке HTML-форм:

#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
foreach $hkey (keys %ENV)
{
 print "$hkey:$ENV{$hkey}"\n;
}

Этот простой скрипт распечатывает значения всех переменных окружения, используя цикл foreach. В этом цикле переменная цикла hkey пробегает по всем уникальным ключам (именам переменных окружения ), которые доставляет функция keys.

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >