Интернет Университет информационных технологий www.intuit.ru
мои курсы мои настройки моя корзина помощь
  Лекции
Основы web-технологий
Глава 1.
Введение в HTML-разметку
Глава 2.
Применение каскадных таблиц стилей
Глава 3.
JavaScript
Глава 4.
Интерфейс Web-приложений
  19.   Общие сведения
  20.   Введение в программирование CGI-...
  21.   Введение в программирование на Perl
  22.   Введение в программирование скри...
  23.   HTML-формы
  24.   Применение методов доступа HTTP ...
      Экзамен
      Ссылки к курсу

  Общение
однокурсники
форум по курсу
вопрос преподавателю

Основы web-технологий
Глава 4. Интерфейс Web-приложений версия для печати: HTML, PDF
Лекция #21: Введение в программирование на Perl Страницы: « 1 2 3 4 вопросы »

Аргументы командной строки

Когда пользователь работает с операционной средой в режиме удаленного алфавитно-цифрового монитора, он пользуется услугами оболочки (shell). Команды в операционной среде в этом случае вводятся в командной строке, и за каждой из команд может тянуться шлейф аргументов. Эти аргументы и называются аргументами командной строки.

CGI-скрипт вызывается не из оболочки, а загружается HTTP-сервером. Если необходимо воспользоваться аргументами командной строки, то сервер должен породить данную командную строку тоже. В CGI это делается только для запросов ISINDEX. В таком случае скрипт вызывается через URI типа:

http://my.intuit.ru/directory/script?arg1+arg2+arg3

В этой записи arg1+arg2+arg3 — аргументы командной строки скрипта, т.е. данный URI равнозначен вводу в командной строке команды:

host>script arg1 arg2 arg3

Для приема этих аргументов достаточно воспользоваться скриптом типа:

#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
foreach $arg (@ARGV)
{
print "$arg\n";
}

В данном случае мы просто их распечатаем. Программа будет выбирать по одному аргументу из системного массива аргументов командной строки @ARGV и помещать их в переменную $arg, а затем печатать.

В принципе, аргументы попадают и в переменную окружения QUERY_STRING, т.к. при запросе типа ISINDEX применяется метод GET. Но тогда придется данную переменную разбирать. Аргументы командной строки уже сделали эту работу за программиста.

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

Поток стандартного ввода обычно ассоциируется с клавиатурой терминала. Поток стандартного ввода — это источник входных данных по умолчанию. В С, например, поток стандартного ввода ассоциируется с файлом STDIN. В Perl применяется то же самое имя.

Для построчного чтения входного потока в Perl применяется пара символов "<>". Простая программа, читающая входной поток, может выглядеть следующим образом:

#!/usr/local/bin/perl
while(
{
print $_;
}

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

Согласно спецификации CGI, скрипт получает данные через стандартный ввод в том случае, если в качестве метода доступа в форме будет указан POST. Приведенный выше пример работы со стандартным потоком ввода не может быть применен для обработки такого запроса. Дело в том, что сервер не закрывает поток ввода и, следовательно, не передает EOF (End of file, конец файла). Цикл while в этом случае будет бесконечным.

Скрипт сам определяет точное количество байтов, которые он должен прочитать из стандартного ввода. Это можно сделать, прочитав значение переменной CONTENT_LENGTH (perlm1.htm):

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

Когда число байтов для чтения из потока стандартного ввода определено, эти байты нужно считать. Воспользуемся функцией read:

#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
print "CONTENT_LENGTH=$ENV{CONTENT_LENGTH}\n";
read STDIN,$query,$ENV{CONTENT_LENGTH};
print "Query:$query.";

После выполнения этих несложных операций в переменную $query будет занесено содержание стандартного ввода скрипта, с которым потом можно будет разбираться

Типы данных и переменные

В Perl существует довольно своеобразный набор типов данных: скаляры, одномерные массивы (массивы), ассоциативные массивы (хешированные таблицы или хеши), глобальные символы, ссылки. Обычно первых трех для CGI-программирования вполне хватает. Ссылки применяют в совокупности со стандартными библиотеками и вместо функции отложенного выполнения eval. Глобальные символы нужны при работе с файлами или для межпроцессного обмена данными при открытии каналов (потоков данных) через дескрипторы.

Скаляры

Скаляры — это все, что нельзя записать в виде массива или структуры. Числа всех типов и строки символов относятся к скалярному типу. Скаляр обозначается символом "$" перед именем. Примеры скаляров:

$a = 1;
$b = 2.5;
$str = "это строка символов";

Одномерные массивы

Массивы — это множество элементов, причем все элементы могут быть разнородными. В Perl нет понятия массива чисел или массива строк. Массив не может быть многомерным. Можно реализовать массив массивов и, таким образом, сделать массив двумерным. Массив обозначается символом "@" перед именем. Примеры массивов:

@a = (1,2,3);
@b = (4,5,6,2.5,"test");
@c = (@a,@b);
@in =
$q = $c[3]; # 4

Индексирование элементов массива начинается с цифры 0. Поэтому в нашем примере четвертый элемент массива с будет индексироваться как $c[4].

Ассоциативные массивы

Ассоциативные массивы — это двухколоночная таблица. Первая колонка — ключ, а вторая колонка — связанное с ним значение. Ассоциативные массивы называют еще хешированными таблицами или просто хешами. Дело в том, что значение можно извлечь из таблицы прямо, указав ключ. При этом используется алгоритм хеширования по ключу.

Для краткости будем называть ассоциативный массив хешем. Обозначается переменная типа хеш символом "%" перед именем. Примеры хешей и обращений к их элементам:

%a = ("test",1,"test2",2);
$c = $a{test}; # $c=1

В первом случае хеш инициируется как обычный массив. Во втором примере мы выбираем значение определенным ключом "test". Результат этой операции, скаляр, помещается в переменную $c.

Указатели

Указатели — это аналог адресных указателей в С. Указатель обозначается символом "\" перед именем переменной:

$a = 1;
$p = \$a;
@b = (1,2,3);
$p = \@b;
$p = \%c;

Обращения к значениям, выбранным указателем, являются аналогом применения функции eval (отложенное исполнение):

%a = ("test",1,"test2",2);
&p = \%a;
$c = $$p{"test"};

где вместо "а" используется $p.

Глобальные символы

Последнее, что мы рассмотрим — это дескрипторы потоков данных. Дескриптор потока указывает на структуру, которая описывает механизм обмена данными, например, с файлом. Применяются такие дескрипторы в функциях чтения и записи данных и в межпроцессном обмене:

open IN,"
read IN,$p,500;
close IN;

В данном случае IN — дескриптор файла.

Перейти к следующей странице »
версия для печати: HTML, PDF
Страницы: « 1 2 3 4 вопросы »
  Основные понятия
Cтандартный ввод, стандартный вывод, переменные окружения, генерация HTML-страниц.
 
  Информация о лекции
В этой лекции подробно разбираются особенности программирования CGI-скриптов на языке Perl. Определяются правила вызова скрипта, передачи ему данных и получение результатов работы скрипта для дальнейшего использования в HTTP-обмене и генерации HTML-страниц. Разбираются причины популярности Perl-скриптов среди Web-программистов.
 
  Учебники к курсу
Основы web-технологий
Основы web-технологий
Храмцов П.Б., Брик С.А., Русак А.М., Сурин А.И.,
Интернет-университет информационных технологий - ИНТУИТ.ру.
Курс лекций посвящен основам Web-технологий. В его рамках рассматриваются язык гипертекстовой разметки HTML, язык программирования динамического контента JavaScript, спецификация разработки прикладного программного обеспечения CGI и спецификация описания стилей представления информации CSS. Допущено УМО в области прикладной информатики для студентов высших учебных заведений, обучающихся по специальности 351400 "Прикладная информатика".
Dynamic HTML
Айзекс С., BHV-Санкт-Петербург.
Настольная книга Web-мастера: эффективное применение HTML, CSS и JavaScript
Коржинский С.Н., КноРус.
Практические занятия по HTML. Краткий курс
Будилов В.А., Наука и техника.
все книги по курсу »