Смекни!
smekni.com

Использование языка Perl (стр. 2 из 2)

6.3 Написание модулей CGI

Язык Perl очень широко используется при написании исполняемых модулей CGI (Common Gateway Interface) для Web. Это обусловлено прежде всего тем, что Perl предоставляет разработчикам простые и удобные средства обработки текста и взаимодействия с базами данных. Наша цель - лишь дать пример использования Perl для написания CGI-модуля. Рассмотрим простую подпрограмму разбора входного потока CGI-программы (при передаче параметров используется метод POST ).

#!/usr/local/bin/perlsub Print {$len = 100;$buf = "";read(STDIN, $buf,$len);# считываем из стандартного потока ввода# в переменную $buf количество символов# $len@ar = split(/[&=]/,$buf);# разбиваем строку в массив строк,# разделителями служат & и =.$output = "Content-type: text/html&bsol;n&bsol;n# посылает тип MIME передаваемого документа<HTML><HEAD><TITLE>Result</TITLE></HEAD><BODY BGCOLOR=&bsol;"#FFAAAA&bsol;"><H1>Hi there</H1><HR><BR>";$i = 0;while ($i <= $#ar) {$ar[$i] =~ s/&bsol;+/ /g;# заменяем в элементах массива + на пробел$output .= "$ar[$i]&bsol;n";# конкатенация переменной $output с# элементом массива$i++; }$output .="<HR></BODY></HTML>";# завершаем HTML страницуprint $output;}eval &Print;# выполняем подпрограмму осуществляющую# считывание, обработку и вывод информации

В данном примере был проиллюстрирован случай считывания параметров из входного потока. Если параметры передаются CGI-модулю в командной строке, то они помещаются в служебный массив @ARGV. Например, если параметры пишуться в URL:
http://www.host.ru/cgi-bin/name.cgi?123+resource+time+12 .
Как видно из примера, написать CGI-модуль на Perl совсем не сложно. Существуют также различные модули для облегчения написания CGI. Документацию по ним и сами модули доступны на сервере www.perl.com

6.4 Обработка файлов формата DBF

Для взаимодействия с файлами этого формата существует специальный модуль - Xbase.pm На текущий момент поддерживается только возможность чтения таких файлов. Этот модуль подключается стандартным образом: use Xbase;

Новый Xbase объект создается следующим образом:

$database = new Xbase;

Будет создан объект $database, который в дальнейшем будет использоваться для взаимодействия со всевозможными методами, которые поддерживает модуль. Доступ к базе данных осуществляется следующим образом:

$database->open_dbf($dbf_name,$idx_name);

Мы ассоциировали DBF-файл и необязательный индексный файл с объектом. Чтобы определить тип (database type) можно сделать следующее:

print $database->dbf_type;

Вернется строка, которая, если Xbase файл открыт, будет содержать значение DBF3, DBF4 или FOX. Чтобы узнать дату последнего обновления делается следующее:

print $database->last_update;

Возвращает строку с датой.
Чтобы узнать номер последней записи можно сделать следующее:

$end=$database->lastrec;

Вернется номер последней записи в файле с базой данных.
Информацию о статусе базы данных можно посмотреть следующим образом:

$database->dbf_stat;

В стандартный выходной поток будет напечатана информация о статусе и структуре базы данных. Этот метод работает аналогично команде display status.
Посмотреть информацию о статусе индексного файла можно используя метод idx_stat:

$database->idx_stat;

Печатает в стандартный выходной поток (STDOUT) информацию о статусе открытого IDX-файла.
Для того чтобы перейти на начало файла есть метод go_top:

$database->go_top;

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

$database->go_bottom;

Передвигает курсор чтения на физический конец файла,если индексы не существуют и на последнюю запись, соответствующую порядку, который задается индексом, в противоположном случае.
Чтобы перейти на следующую запись есть метод go_next:

$database->go_next;

Эквивалентно команде skip 1, которая передвигает курсор на следующую запись.
Чтобы перейти на предыдущую запись есть метод go_prev:

$database->go_prev;

Эквивалентно команде skip -1, которая передвигает курсор на предыдущую запись.
Есть возможность осуществить поиск по заданному ключу:

$stat=$database->seek($keyvalue);

Эта команда устанавливает курсор на первую запись, соответствующую данному ключу. Но в данном случае база данных должна быть открыта с соответствующим индексом, в противоположном случае будет выдано сообщение об ошибке и исполнение прекратиться. Возвращается значение, содержащее информацию о том, был ключ найден или нет.
Чтобы узнать номер записи, на которой стоит курсор можно использовать следующую команду:

$current_rec=$database->recno;

Метод bof возвращает значение true, если курсор находится в самом начале файла.

if ($database->bof) { print " At the very top of the file &bsol;n";}

Аналогично действует метод eof:

if ($database->eof) { print " At the very end of the file &bsol;n";}

Чтобы прочитать содержимое какого-либо поля записи можно поступить так:

print $database->get_field("NAME");

Возвращает строку с содержимым поля. Если данная запись помечена для удаления, то использует псевдоимя поля _DELETED.
Чтобы прочитать значения полей записи в массив можно поступить так:

@fields = $database->get_record;

В массиве они будут располагаться в такой же последовательности, как и в базе данных.
Для закрытия базы данных используется метод close_dbf.

$database->close_dbf;

Закрывает файл с базой данных, индексами и комментариями. В завершение приведем небольшой пример программы, которая распечатывает статус базы данных и индексного файла, а также дату последнего обновления и количество записей в базе данных.

#!/usr/bin/perluse Xbase;# подключение модуля$database = new Xbase;# создание объекта$d = "/home/smit/employee.dbf";# имя файла с базой$i = "/home/smit/employee.cdx";# имя индексного файла$database->open_dbf($d,$i);# открываем базу данных$database->dbf_stat;# печатаем статус и структуру# базы данных$database->idx_stat;# печатаем статус и структуру# индексов@fields = $database->get_record;print @fields,"&bsol;n";# печатаем содержимое текущей записиprint $database->last_update, "&bsol;n";# печатаем дату последнего обновления$end = $database->lastrec;print $end;#печатаем номер последней записи