Россия, г. Санкт-Петербург |
Введение в программирование на Perl
Язык программирования Perl является основным средством разработки CGI-скриптов для Web-узлов. Его не применяют только там, где требуется высокая эффективность кода и нет стандартных библиотек для Perl.
Perl как язык разработки скриптов имеет ряд преимуществ. Перечислим их в порядке значимости:
- независимость от программно-аппаратной платформы;
- мощные средства разбора строк;
- простота работы с переменными окружения ;
- простота работы со входными и выходными стандартными потоками;
- возможность чтения заданного числа символов из входного потока;
- хешированные таблицы;
- возможность организации конвейеров;
- библиотеки TCP/IP-обмена;
- множество стандартных библиотек прикладных программ.
Все это делает программное обеспечение, написанное на Perl, мобильным, а разработку программ — быстрой и простой.
Структура Perl-программы
У программы на языке Perl нет жестко заданной структуры. Точнее сказать, программист не обязан ее соблюдать. Если же он захочет, чтобы интерпретатор контролировал объявление и использование переменных и конструкций языка, то при помощи класса strict он может такой контроль установить.
Программа на Perl состоит из операторов языка, которые должны заканчиваться символом ";". Например:
print "Привет, Perl.";
В общем случае операторы делятся на простые и составные. Простой оператор — это оператор print, например, а составной — while():
while() {s/</</g; s/>/>/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.