Использование языка Perl Содержание 6.1Основные особенности Perl 1.1Введение 6.2Взаимодействие с СУБД 2.1Взаимодействие с Oracle 1.1Основные функции доступа 1.2Дополнительные функции 1.3Переменные 1.4Переменные для подстановки 6.3Написание модулей CG6.4Обработка файлов формата DBF 6.1 Основные особенности Perl 1.1 Введение Perl - интерпретируемый язык, приспособленный для обработки
произвольных текстовых файлов, извлечения из них необходимой информации и выдачи сообщений. Perl также удобен для написания различных системных программ. Этот язык прост в использовании, эффективен, но про него трудно сказать, что он элегантен и компактен. Perl сочитает в себе лучшие черты C, shell, sed и awk, поэтому для тех, кто знаком с ними, изучение Perl-а не представит особого труда. Cинтаксис выражений
Perl-а близок к синтаксису C. В отличие от большинства утилит ОС UNIX Perl не ставит ограничений на объем обрабатываемых данных и если хватает ресурсов, то весь файл обрабатывается как одна строка. Рекурсия может быть произвольной глубины. Хотя Perl приспособлен для обработки текстовых файлов, он может обрабатывать так же двоичные данные и создавать .dbm файлы, подобные ассоциативным массивам.
Perl позволяет использовать регулярные выражения, создавать объекты, вставлять в программу на С или C куски кода на Perl-е, а также позволяет осуществлять доступ к базам данных, в том числе Oracle. Этот язык часто используется для написания CGI-модулей, которые, в свою очередь, могут обращаться к базам данных. Таким образом может осуществляться доступ к базам данных через
WWW. 6.2 Взаимодействие с СУБД Perl позволяет осуществлять доступ к различным СУБД. Здесь будет освещен вопрос доступа к СУБД Oracle. 2.1 Взаимодействие с Oracle 1.1 Основные функции доступа Мы приведем здесь пример программы, которая создает таблицу, помещает в нее некоторые данные и потом производит выборку строк из этой таблицы. usrlocalbinperl use
Oraperl подключаем модуль Oraperl systemid Tbdhost.comBase lda oraloginsystemid,scott,tiger вход в систему st create table EMP name varchar2100, organization varchar2100 csr oraopenlda,st die oraerrstr oraclosecsr создание таблицы в базе данных st insert into EMP values John Smit, NATO csr oraopenlda, st oraclosecsr помещение строки в таблицу В результате в базе создалась таблица из двух столбцов с одной записью
Name Organization John Smit NATO st select name from EMP where organization NATO csr oraopenlda,st выбираем из таблицы значения столбца name, которым сответствует значение столбца organization равное NATO result orafetchcsr помещаем эти значения в массив result oraclosecsr print result oralogofflda выход из системы Для взаимодействия с Oracle в Perl есть специальный модуль Oraperl.pm. Основными функциями для доступа к базе данных являются
oralogin lda oraloginsystemid,username,password Для того, чтобы получить доступ к информации, хранимой в Oracle необходимо сначала войти в систему. Это осуществляется вызовом функции oralogin. Эта функция имеет три параметра системный идентификатор базы данных, имя пользователя в базе и пароль пользователя. Возвращается идентификатор регистрации в системе Oracle Login Data Area. Несколько доступов могут осуществляться одновременно.
Эта функция эквивалентна функции OCIInterface olon или orlon. oraopen csr oraopenlda, statement ,cache Для определения SQL-запроса в базу данных программа должна вызывать функцию oraopen. Эта функция имеет как минимум два параметра идентификатор регистрации и SQL выражение. Необязательный третий параметр описывает размер буфера строк для SELECT оператора. Возвращается курсор Oracle. Если третий параметр опущен, то используется стандартный
размер буфера. csr oraopenlda,select ename, sal from emp order by ename,10 Эта функция эквивалентна функции OCI oopen или oparse. orabind orabindcsr, var, Если SQL выражение содержит обращение к переменным языка Perl, то необходимо подставить вместо имен значения переменных. Для этого используется функция orabind. csr oraopenlda, insert into emp values 1,2 orabindcsr,ename,
sal - подставляет в SQL выражение вместо 1 и 2 значения переменных ename и sal. orafetch nfields orafetchcsr, trunc array orafetchcsr Эта функция используется с оператором SQL SELECT для извлечения информации из базы данных и имеет только один обязательный параметр - идентификатор курсора, полученный в результате вызова функции oraopen. В скалярном контексте она возвращает число выбранных строк, в списковом - массив выбранных строк.
Второй необязательный параметр содержит информацию о том, можно ли обрезать данные типов LONG и LONG RAW или выдавать сообщение об ошибке. Если параметр опущен, то информация берется из переменной oratrunc. Если произошло обрезание данных, то переменная oraerrno принимает значение 1406. Эта функция эквивалентна функции OCI ofetch. oraclose oraclosecsr Если открытый курсор не будет больше использоваться, то его нужно закрыть вызовом функции oraclose.
Это эквивалентно функции OCI oclose. orado oradolda,statement Не все SQL-выражения возвращают данные или содержат переменные для подстановки. В таких случаях функция orado выступает в качестве альтернативы oraopen и oraclose. Первым параметром является идентификатор регистрации, вторым SQL выражение. oradolda,drop table employee это эквивалентно oracloseoraopenlda, drop table employee
oralogoff oralogofflda Для выхода из системы используется функция oralogoff. Она эквивалентна функции OCI ologoff. 1.2 Дополнительные функции Дополнительные возможности предоставляются функциями oratitlesoralength oratypesoraautocommitoracommit orarollbackoraversionoratitles titles oratitlescsr Программа может определить название полей, содержимое которых будет извлечено запросом, вызовом функции
oratitle. Эта функция имеет один параметр - курсор. Заголовки обрезаются до длины поля. oralength length oralengthcsr Программа может определить длину каждого из полей, возвращенных запросом, с помощью вызова функции oralength. Она имеет только один параметр - курсор и возвращает массив целых чисел. oratypes types oratypescsr Программа может определить тип каждого из полей, возвращенных запросом, с помощью вызова функции oratypes.
Она имеет один параметр - курсор и возвращает массив целых чисел. Эти типы определяются в документации по OCI и в файле oraperl.ph для Oracle v6. oraautocommit oraautocommitlda,onoroff Режим автоматического завершения транзакций можно установить или отменить вызовом функции oraautocommit. Эта функция имеет два параметра идентификатор регистрации и булевскую переменную, которая указывает
действие, которое нужно выполнить. Если значение переменной ненулевое, то режим включается, если нулевое, то отключается. По умолчанию режим не включен. Режим включается на продолжительность пребывания в системе. Если есть необходимость включать его только для одного оператора, то лучше делать несколько регистраций и использовать для каждого оператора отдельный идентификатор регистрации. oracommit, orarollback oracommitlda orarollbacklda Изменения в базе данных могут быть сохранены или отменены вызовом этих функций.
Они имеют один параметр - идентификатор регистрации в системе. Транзакции, результат которых уже был сохранен не могут быть отменены orarollback. Эти функции также действуют на все время пребывания в системе, а не на отдельные операторы. oraversion oraversion Эта функция печатает версию и информацию об авторских правах, касающуюся Oraperl. Она не возвращает ничего. 6.2.1.3 Переменные
В модуле Oraperl.pm есть шесть специальных переменныхoracacheoralongoratruncoraerrn ooraerrstr oravernoЭти переменные используются для определения поведения Oraperl в определенных условиях. oracache Эта переменная определяет размер буфера для функции oraopen и SELECT-выражения, если точный размер буфера не указан. Как правило устанавливается размер буфера равный пяти.
Присваивание этой переменной значения, равного нулю, устанавливает значение этой переменной равным первоначальному значению. Присваивание отрицательной величины приводит к ошибке. oralong Обычно Oraperl спрашивает базу данных о длине каждого поля и соответствующим образом распределяет буферное пространство. Это невозможно для полей типа LONG и LONGRAW. Распределение пространства в предположении максимально возможной длины 65535 bytes привело
бы к излишним тратам памяти. Поэтому когда oraopen определяет, что поле имеет тип LONG, память распределяется согласно значению переменной oralong. При инициализации она принимает значение 80 для совместимости с продуктами Oracle, но в программе ее можно устанавливать произвольным образом. oratrunc Так как Oraperl не может точно определять длину значений типа
LONG, возникают ситуации, когда значение oralong недостаточно для хранения полученных данных. В таком случае, если у orafetch есть необязательный второй параметр, происходит обрезание данных. Если второй параметр опущен, то вместо него используется значение oratrunc. oraerrno Содержит код ошибки произошедшей при последнем вызове какой-либо функции. Есть два интересных случая, касающихся orafetch. В первом случае, если произошло обрезание данных типа
LONG или LONGRAW и обрезание было разрешено, тогда выполнение этой функции полностью успешно, но oraerrno принимает значение 1406, для индикации того, что произошло обрезание. Во втором случае, если orafetch возвратила false, то oraerrno принимает значение 0 в случае конца данных или код ошибки, если действительно произошла ошибка. oraerrstr Содержит сообщение об ошибке, соответствующее значению oraerrno. oraverno
Содержит версию Oraperl в формате v.ppp, где v - основной номер версии, а ppp - patchlevel. 6.2.1.4 Переменные для подстановки Oraperl позволяет SQL выражению содержать обращение к переменным языка Perl. Они состоят из двоеточия и следующего за ним номера. Например csr oraopenlda,insert into tel values1,2
Эти два имени 1 и 2 называются переменными для подстановки. Функция orabind используется для привязывания переменных к их значениям. orabindcsr, Annette,3-222-2-22-22-22 orabindcsr,name,telephone Номера переменных должны следовать в порядке возрастания начиная с 1, так как orabind выполняет подстановку именно в таком порядке. 6.3 Написание модулей CGI Язык
Perl очень широко используется при написании исполняемых модулей CGI Common Gateway Interface для Web. Это обусловлено прежде всего тем, что Perl предоставляет разработчикам простые и удобные средства обработки текста и взаимодействия с базами данных. Наша цель - лишь дать пример использования Perl для написания CGI-модуля. Рассмотрим простую подпрограмму разбора входного потока
CGI-программы при передаче параметров используется метод POST . usrlocalbinperl sub Print len 100 buf readSTDIN, buf,len считываем из стандартного потока ввода в переменную buf количество символов len ar split,buf разбиваем строку в массив строк, разделителями служат и . output Content-type texthtmlnn посылает тип MIME передаваемого документа HTML HEAD TITLE Result
TITLE HEAD BODY BGCOLORFFAAAA H1 Hi there H1 HR BR i 0 while i ar ari s g заменяем в элементах массива на пробел output . arin конкатенация переменной output с элементом массива i output . HR BODY HTML завершаем HTML страницу print output eval выполняем подпрограмму осуществляющую считывание, обработку и вывод информации В данном примере был проиллюстрирован случай считывания параметров из входного потока. Если параметры передаются CGI-модулю в командной строке, то они помещаются в служебный
массив ARGV. Например, если параметры пишуться в URL httpwww.host.rucgi-binname.cgi123resourc etime12 .Как видно из примера, написать CGI-модуль на Perl совсем не сложно. Существуют также различные модули для облегчения написания CGI. Документацию по ним и сами модули доступны на сервере www.perl.com 6.4 Обработка файлов формата DBF Для взаимодействия с файлами этого формата существует специальный модуль
- Xbase.pm На текущий момент поддерживается только возможность чтения таких файлов. Этот модуль подключается стандартным образом use Xbase Новый Xbase объект создается следующим образом database new Xbase Будет создан объект database, который в дальнейшем будет использоваться для взаимодействия со всевозможными методами, которые поддерживает модуль.
Доступ к базе данных осуществляется следующим образом database- opendbfdbfname,idxname Мы ассоциировали DBF-файл и необязательный индексный файл с объектом. Чтобы определить тип database type можно сделать следующее print database- dbftype Вернется строка, которая, если Xbase файл открыт, будет содержать значение DBF3, DBF4 или FOX. Чтобы узнать дату последнего обновления делается следующее print database- lastupdate
Возвращает строку с датой.Чтобы узнать номер последней записи можно сделать следующее enddatabase- lastrec Вернется номер последней записи в файле с базой данных.Информацию о статусе базы данных можно посмотреть следующим образом database- dbfstat В стандартный выходной поток будет напечатана информация о статусе и структуре базы данных. Этот метод работает аналогично команде display status.
Посмотреть информацию о статусе индексного файла можно используя метод idxstat database- idxstat Печатает в стандартный выходной поток STDOUT информацию о статусе открытого IDX-файла.Для того чтобы перейти на начало файла есть метод gotop database- gotop Передвигает курсор чтения на физическое начало файла,если индексы не существуют и на первую запись, соответствующую порядку, который задается индексом, в противоположном случае.
Для того чтобы перейти на конец файла есть метод gobottom database- gobottom Передвигает курсор чтения на физический конец файла,если индексы не существуют и на последнюю запись, соответствующую порядку, который задается индексом, в противоположном случае.Чтобы перейти на следующую запись есть метод gonext database- gonext Эквивалентно команде skip 1, которая передвигает курсор на следующую запись.
Чтобы перейти на предыдущую запись есть метод goprev database- goprev Эквивалентно команде skip -1, которая передвигает курсор на предыдущую запись.Есть возможность осуществить поиск по заданному ключу statdatabase- seekkeyvalue Эта команда устанавливает курсор на первую запись, соответствующую данному ключу. Но в данном случае база данных должна быть открыта с соответствующим индексом, в противоположном случае
будет выдано сообщение об ошибке и исполнение прекратиться. Возвращается значение, содержащее информацию о том, был ключ найден или нет.Чтобы узнать номер записи, на которой стоит курсор можно использовать следующую команду currentrecdatabase- recno Метод bof возвращает значение true, если курсор находится в самом начале файла. if database- bof print At the very top of the file n Аналогично действует метод eof if database- eof print
At the very end of the file n Чтобы прочитать содержимое какого-либо поля записи можно поступить так print database- getfieldNAME Возвращает строку с содержимым поля. Если данная запись помечена для удаления, то использует псевдоимя поля DELETED.Чтобы прочитать значения полей записи в массив можно поступить так fields database- getrecord В массиве они будут располагаться в такой же последовательности, как и в базе данных.
Для закрытия базы данных используется метод closedbf. database- closedbf Закрывает файл с базой данных, индексами и комментариями. В завершение приведем небольшой пример программы, которая распечатывает статус базы данных и индексного файла, а также дату последнего обновления и количество записей в базе данных. usrbinperl use Xbase подключение модуля database new Xbase создание объекта d homesmitemployee.dbf имя файла с базой
i homesmitemployee.cdx имя индексного файла database- opendbfd,i открываем базу данных database- dbfstat печатаем статус и структуру базы данных database- idxstat печатаем статус и структуру индексов fields database- getrecord print fields,n печатаем содержимое текущей записи print database- lastupdate, n печатаем дату последнего обновления end database- lastrec print end печатаем номер последней записи
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |