Використання мови Perl

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Зміст

6.1Основние особливості Perl
6.1.1Введеніе

6.2Взаімодействіе з СУБД
6.2.1Взаімодействіе з Oracle
6.2.1.1Основние функції доступу
6.2.1.2Дополнітельние функції
6.2.1.3Переменние
6.2.1.4Переменние для підстановки

6.3Напісаніе модулів CGI

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

6.1 Основні особливості Perl

6.1.1 Введення

Perl - мова, що інтерпретується, пристосована для обробки довільних текстових файлів, витягання з них необхідної інформації і видачі повідомлень. Perl також зручний для написання різних системних програм. Ця мова проста у використанні, ефективний, але про нього важко сказати, що він елегантний і компактний. Perl поєднується в собі кращі риси C, shell, sed і awk, тому для тих, хто знайомий з ними, вивчення Perl-а не завдасть труднощів. Синтаксису виразів Perl-а близький до синтаксису C. На відміну від більшості утиліт ОС UNIX Perl не ставить обмежень на обсяг оброблюваних даних і якщо вистачає ресурсів, то весь файл обробляється як один рядок. Рекурсія може бути довільної глибини. Хоча Perl пристосований для обробки текстових файлів, він може обробляти так само двійкові дані і створювати. Dbm файли, подібні асоціативним масивів. Perl дозволяє використовувати регулярні вирази, створювати об'єкти, вставляти в програму на С або C + + шматки коду на Perl-і, а також дозволяє здійснювати доступ до баз даних, в тому числі Oracle.
Ця мова часто використовується для написання CGI-модулів, які, у свою чергу, можуть звертатися до баз даних. Таким чином може здійснюватися доступ до баз даних через WWW.

6.2 Взаємодія з СУБД

Perl дозволяє здійснювати доступ до різних СУБД. Тут буде висвітлено питання доступу до СУБД Oracle.

6.2.1 Взаємодія з Oracle 6.2.1.1 Основні функції доступу

Ми наведемо тут приклад програми, яка створює таблицю, поміщає в неї деякі дані і потім виробляє вибірку рядків із цієї таблиці.

#! / Usr / local / bin / perluse Oraperl; # підключаємо модуль Oraperl $ system_id = 'T: bdhost.com: Base'; $ lda = & ora_login ($ system_id, 'scott', 'tiger'); # вхід в систему $ st = 'create table EMP (name varchar2 (100), organization varchar2 (100 ))';$ csr = & ora_open ($ lda, $ st) | | die $ ora_errstr; & ora_close ($ csr); # створення таблиці в базі даних $ st = 'insert into EMP values ​​(' John Smit ',' NATO')';$ csr = & ora_open ($ lda, $ st); & ora_close ($ csr); # приміщення рядки в таблицю

У результаті в базі створилася таблиця з двох стовпців з одним записом:

Name Organization
John Smit NATO
$ St = 'select name from EMPwhere organization =' NATO''; $ csr = & ora_open ($ lda, $ st); # вибираємо з таблиці значення стовпця name, # яким Відповідає значення стовпця organization # рівне 'NATO' @ result = & ora_fetch ($ csr); # поміщаємо ці значення в масив @ result & ora_close ($ csr); print @ result; & ora_logoff ($ lda); # вихід із системи

Для взаємодії з Oracle в Perl є спеціальний модуль Oraperl.pm. Основними функціями для доступу до бази даних є:
& Ora_login

$ Lda = & ora_login ($ system_id, $ username, $ password)

Для того, щоб отримати доступ до інформації, що зберігається в Oracle необхідно спочатку увійти в систему. Це здійснюється викликом функції & ora_login (). Ця функція має три параметри: системний ідентифікатор бази даних, ім'я користувача в базі і пароль користувача. Повертається ідентифікатор реєстрації в системі (Oracle Login Data Area). Кілька доступів можуть здійснюватися одночасно. Ця функція еквівалентна функції OCI (Oracle Call Interface) olon або orlon.
& Ora_open

$ Csr = & ora_open ($ lda, $ statement [, $ cache])

Для визначення SQL-запиту до бази даних програма повинна викликати функцію & ora_open. Ця функція має як мінімум два параметри: ідентифікатор реєстрації і SQL вираз. Необов'язковий третій параметр описує розмір буфера рядків для SELECT оператора. Повертається курсор Oracle. Якщо третій параметр опущений, то використовується стандартний розмір буфера.

$ Csr = & ora_open ($ lda, 'select ename, sal from emp order by ename', 10);

Ця функція еквівалентна функції OCI oopen або oparse.
& Ora_bind

& Ora_bind ($ csr, $ var, ...)

Якщо SQL вираз містить звернення до змінних мови Perl, то необхідно підставити замість імен значення змінних. Для цього використовується функція & ora_bind.

$ Csr = & ora_open ($ lda, 'insert into emp values ​​(: 1,: 2 )');& ora_bind ($ csr, $ ename, $ sal);

- Підставляє в SQL вираз замість: 1 і: 2 значення змінних $ ename і $ sal.
& Ora_fetch

$ Nfields = & ora_fetch ($ csr [, trunc]); @ array = & ora_fetch ($ csr);

Ця функція використовується з оператором SQL SELECT для витягання інформації з бази даних і має тільки один обов'язковий параметр - ідентифікатор курсора, отриманий в результаті виклику функції & ora_open. У скалярному контексті вона повертає число вибраних рядків, в списковому - масив вибраних рядків. Другий необов'язковий параметр містить інформацію про те, чи можна обрізати дані типів LONG і LONG RAW або видавати повідомлення про помилку. Якщо параметр опущений, то інформація береться з змінної $ ora_trunc. Якщо сталася обрізання даних, то змінна $ ora_errno приймає значення 1406. Ця функція еквівалентна функції OCI ofetch.
& Ora_close

& Ora_close ($ csr)

Якщо відкритий курсор не буде більше використовуватися, то його треба закрити викликом функції & ora_close. Це еквівалентно функції OCI oclose.
& Ora_do

& Ora_do ($ lda, $ statement)

Не всі SQL-вирази повертають дані або містять змінні для підстановки. У таких випадках функція & ora_do виступає в якості альтернативи & ora_open і & ​​ora_close. Першим параметром є ідентифікатор реєстрації, другим - SQL вираз.

& Ora_do ($ lda, 'drop table employee');

це еквівалентно:

& Ora_close (& ora_open ($ lda, 'drop table employee'));


& Ora_logoff

& Ora_logoff ($ lda)

Для виходу із системи використовується функція & ora_logoff. Вона еквівалентна функції OCI ologoff.

6.2.1.2 Додаткові функції

Додаткові можливості надаються функціями
& Ora_titles ()
& Ora_length ()
& Ora_types ()
& Ora_autocommit ()
& Ora_commit ()
& Ora_rollback ()
& Ora_version ()

& Ora_titles

@ Titles = & ora_titles ($ csr)

Програма може визначити назву полів, вміст яких буде витягнуто запитом, викликом функції & ora_title. Ця функція має один параметр - курсор. Заголовки обрізуються до довжини поля.
& Ora_length

@ Length = & ora_length ($ csr)

Програма може визначити довжину кожного з полів, повернутих запитом, за допомогою виклику функції & ora_length. Вона має тільки один параметр - курсор і повертає масив цілих чисел.
& Ora_types

@ Types = & ora_types ($ csr)

Програма може визначити тип кожного з полів, повернутих запитом, за допомогою виклику функції & ora_types. Вона має один параметр - курсор і повертає масив цілих чисел. Ці типи визначаються в документації по OCI і у файлі oraperl.ph для Oracle v6.
& Ora_autocommit

& Ora_autocommit ($ lda, $ on_or_off)

Режим автоматичного завершення транзакцій можна встановити або відмінити викликом функції & ora_autocommit. Ця функція має два параметри: ідентифікатор реєстрації і булевою змінну, яка вказує дію, яку потрібно виконати. Якщо значення змінної ненульове, то режим включається, якщо нульове, то відключається. За замовчуванням режим не включений. Режим включається на тривалість перебування в системі. Якщо є необхідність включати його тільки для одного оператора, то краще робити декілька реєстрацій і використовувати для кожного оператора окремий ідентифікатор реєстрації.
& Ora_commit, & ora_rollback

& Ora_commit ($ lda) & ora_rollback ($ lda)

Зміни в базі даних можуть бути збережені або скасовані викликом цих функцій. Вони мають один параметр - ідентифікатор реєстрації в системі. Транзакції, результат яких вже був збережений не можуть бути скасовані & ora_rollback. Ці функції також діють на весь час перебування в системі, а не на окремі оператори.
& Ora_version

& Ora_version ()

Ця функція друкує версію і інформацію про авторські права, що стосується Oraperl. Вона не повертає нічого.

6.2.1.3 Змінні

У модулі Oraperl.pm є шість спеціальних змінних:
$ Ora_cache
$ Ora_long
$ Ora_trunc
$ Ora_errno
$ Ora_errstr
$ Ora_verno
Ці змінні використовуються для визначення поведінки Oraperl в певних умовах.
$ Ora_cache Ця змінна визначає розмір буфера для функції & ora_open () і SELECT-вирази, якщо точний розмір буфера не вказаний. Як правило встановлюється розмір буфера рівний п'яти. Присвоєння цієї змінної значення, рівного нулю, встановлює значення цієї змінної рівним початкового значення. Присвоєння негативної величини призводить до помилки.
$ Ora_long Зазвичай Oraperl запитує базу даних про довжину кожного поля і відповідним чином розподіляє буферне простір. Це неможливо для полів типу LONG і LONGRAW. Розподіл простору в припущенні максимально можливої ​​довжини (65535 bytes) призвело б до зайвих витрат пам'яті. Тому коли & ora_open () визначає, що поле має тип LONG, пам'ять розподіляється згідно значенню змінної $ ora_long. При ініціалізації вона приймає значення 80 (для сумісності з продуктами Oracle), але в програмі її можна встановлювати довільним чином.
$ Ora_trunc Так як Oraperl не може точно визначати довжину значень типу LONG, виникають ситуації, коли значення $ ora_long недостатньо для зберігання отриманих даних. У такому випадку, якщо у & ora_fetch є необов'язковий другий параметр, відбувається обрізання даних. Якщо другий параметр опущений, то замість нього використовується значення $ ora_trunc.
$ Ora_errno Містить код помилки сталася при останньому виклику якої-небудь функції. Є два цікавих випадку, що стосуються & ora_fetch (). У першому випадку, якщо відбулося обрізання даних типу LONG або LONGRAW і обрізання було дозволено, тоді виконання цієї функції повністю успішно, але $ ora_errno приймає значення 1406, для індикації того, що сталося обрізання. У другому випадку, якщо & ora_fetch () повернула false, то $ ora_errno приймає значення 0 у разі кінця даних або код помилки, якщо дійсно відбулася помилка.
$ Ora_errstr Містить повідомлення про помилку, яке відповідає значенню $ ora_errno.
$ Ora_verno Містить версію Oraperl у форматі v.ppp, де v - основний номер версії, а ppp - patchlevel.

6.2.1.4 Змінні для підстановки

Oraperl дозволяє SQL виразу містити звернення до змінних мови Perl. Вони складаються з двокрапки і наступного за ним номера. Наприклад:

$ Csr = & ora_open ($ lda, "insert into tel values ​​(: 1,: 2)");

Ці два імені: 1 і: 2 називаються змінними для підстановки. Функція & ora_bind () використовується для прив'язування змінних до їх значень.

& Ora_bind ($ csr, "Annette", "3-222-2-22-22-22"); & ora_bind ($ csr, $ name, $ telephone);

Номери змінних повинні слідувати в порядку зростання починаючи з 1, так як & ora_bind виконує підстановку саме в такому порядку.

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 / htmlnn # посилає тип MIME переданого документаResultHi there
"; $ I = 0; while ($ i 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_divv:

$ Database-> go_divv;

Еквівалентно команді skip -1, яка пересуває курсор на попередній запис.
Є можливість здійснити пошук по заданому ключу:

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

Ця команда встановлює курсор на перший запис, відповідну даному ключу. Але в даному випадку база даних повинна бути відкрита з відповідним індексом, в протилежному випадку буде видане повідомлення про помилку і виконання припинитися. Повертається значення, що містить інформацію про те, був ключ знайдений чи ні.
Щоб дізнатися номер запису, на якому стоїть курсор можна використовувати наступну команду:

$ Current_rec = $ database-> 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-> 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, "n"; # друкуємо вміст поточної запісіprint $ database-> last_update, "n"; # друкуємо дату останнього оновлення $ end = $ database-> lastrec; print $ end; # друкуємо номер останнього запису


Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат
27.9кб. | скачати


Схожі роботи:
Регулярні вирази в perl
книга Основи Perl для Біоінформатика
Захищаємо Perl шунт в мозок або звіряча нейрохірургія
Алгоритмічні мови використання множин
Використання наочності на уроках російської мови
Використання Інтернету в навчанні іноземної мови
Використання компютера на уроках рідної мови
Використання проектної методики на уроках іноземної мови
Використання комп ютера на уроках рідної мови
© Усі права захищені
написати до нас