Мова perl - студопедія

Мова Perl (Practical Extraction and Report Language) - це мова програмування, сильними сторонами якого вважаються його багаті можливості для роботи з текстом, в тому числі реалізовані за допомогою регулярних виразів. Також мова відома тим, що має величезну колекцію додаткових модулів CPAN.

Щоб запустити програму на мові Perl на виконання, її компіляція не потрібно, вона цілком може виконуватися під керуванням інтерпретатора. Щоб файл з вихідним текстом Perl можна було запускати на виконання, треба щоб перша його рядок виглядала так:

Основними типами даних в мові є: скаляри, масиви (скалярні), хеш-таблиці (асоціативні масиви), функції, файлові дескриптори і константи.

Змінні різних типів відрізняються знаком, який стоїть перед ім'ям змінної:

$ A - скаляр або покажчик

@b - скалярний масив

% C - асоціативний масив (хеш-таблиця)

F - дескриптор введення-виведення або константа

Скалярні змінні використовуються для зберігання одиночних значень. Вони можуть містити числа, рядки і посилання на інші об'єкти. Перед ім'ям скалярної змінної необхідно ставити знак долара '$'. Тип скалярної змінної не фіксований і визначається динамічно в залежності від контексту.

Скалярний масив є впорядкованим списком скалярів. Кожен елемент масиву має порядковий номер (індекс), за допомогою якого до нього можна отримати доступ. Нумерація елементів починається з нуля.

Перед ім'ям змінної типу скалярний масив вказується знак @, а для доступу до певного елементу масиву необхідно ставити знак $, так як певний елемент масиву є скаляром:

print "Другий місяць зими", $ winter [1], "\ n";

Хеш-таблиця являє собою асоціативний масив, що дозволяє асоціювати рядок (ключ) з скаляром (значення). Рядок при цьому називається ключем. а скаляр в хеш-таблиці - значенням. Перед ім'ям змінної-списку необхідно ставити знак відсотка%, а для доступу до певного елементу масиву ставлять знак $.

Фактично хеш-таблиця являє собою масив, де в непарних позиціях знаходяться ключі. а на парних - значення.

Використання асоціативних масивів нагадує використання масивів скалярних значень, проте індексація проводиться не цілими числами, а ключовими словами. Крім того, індекси полягають не в квадратні, а в фігурні дужки.

Так, наприклад, для того щоб привласнити значення трьох елементів масиву .ict з індексами first, second і third, можна скористатися одним з двох способів, зазначених нижче.

"перший другий третій";

Крім того, існує спосіб одночасно записати в асоціативний масив і ключові слова, і їх значення. Зробити це можна за допомогою наступного виразу:

імя_массіва = (ключ 1, значення 1, ключ 2, значення 2.);

Для прикладу, наведеного вище, цей вислів буде виглядати так:

.ict = ( "first", "перший",

Розглянемо наведений наступний фрагмент програми на мові Perl.

Крім $ _ в Perl є й інші визначені змінні:

Подібно визначеним скалярним змінним, в Perl існують масиви, що мають спеціальне значення. Найбільш важливий з них - асоціативний масив% ENV, що містить поточні значення змінних оточення. Щоб отримати значення змінної оточення, треба звернутися до елементу даного масиву, вказавши в якості індексу ім'я змінної оточення. Так, наведене нижче вираз записує в скалярную змінну $ path_string значення змінної оточення PATH.

Одна з перших рядків CGI-сценарію на Perl, може виглядати так

Для роботи з файлами і потоками в Perl передбачені спеціальні файлові дескриптори.

Файлові дескриптори є покажчик на файл, пристрій або PIPE канал, відкриті для запису, читання або для запису і читання. оператор "<>"В Perl називається діамантовим оператором (diamond operator). Він визначає операцію читання рядки з потоку, дескриптор якого міститься в кутових дужках:

$ Str =; # Читання рядки з дескриптора STDIN (стандартного потоку введення)

@ Lines =; # Читання всіх рядків з пов'язаного з дескриптором файлу F.

print STDOUT $ str; # Друк в STDOUT (стандартний потік виводу)

Для зв'язування файлу з файловим дескриптором використовується функція open. Нижче наводяться варіанти використання цієї функції:

open дескріптор_потока> имя_файла

файл відкривається для виводу даних. Якщо файл з вказаним ім'ям відсутня, створюється новий файл.

open дескріптор_потока >> имя_файла

файл відкривається в режимі, що дозволяє записувати дані в кінець файлу.

open дескріптор_потока +> имя_файла

відкритий файл стає доступним для читання і для запису.

закриває файл, пов'язаний із зазначеним дескриптором.

До складу мови Perl входять засоби пошуку та заміни, причому, задаючи шаблон для пошуку, можна використовувати регулярні вирази. Це означає, що складні операції, що зустрічаються в спеціалізованих додатках, можна легко реалізувати в будь-який Perl-програми.

Оператор пошуку m // записується в такий спосіб:

Якщо значення змінної $ _ містить підрядок, відповідну зазначеному шаблоном, оператор пошуку повертає значення true.

Розглянемо наступний приклад:

Оператор заміни s /// записується в такий спосіб:

s / шаблон пошуку / вираз для заміни / [набір модифікаторів]

При виконанні оператора s /// проводиться пошук відповідності шаблоном, і якщо пошук завершується успішно, знайдений підрядок замінюється зазначеним виразом. Подібно оператору m //, оператор s /// використовує змінну $ _. Нижче наведено найпростіший приклад застосування оператора s ///.

$ _ = "CGI-сценарій написаний на мові С";

В результаті виконання сценарію на консоль буде виведена наступна рядок:

CGI-сценарій написаний на мові Perl

Оскільки символ С міститься в абревіатурі CGI, тому в шаблоні пошуку вказано, що він повинен бути останнім у рядку.

За останніми роздільником в операторі s /// можуть слідувати один або кілька модифікаторів. Призначення деяких модифікаторів наведено нижче.

  • g - глобальний пошук. Якщо цей модифікатор не вказано, після виявлення першого відповідності оператор s /// закінчить свою роботу. Тому при відсутності модифікатора g буде вироблено не більше однієї заміни.
  • i - вказує, що при пошуку слід ігнорувати регістр символів.
  • e - вказує, що послідовність символів для заміни слід інтерпретувати не як підрядок, а як вираження Perl.

У вираженні для підстановки можуть бути присутніми змінні $ 1 - $ 9, і в цьому випадку необхідно вказати модифікатор е. Так, наприклад, якщо потрібно інтерпретувати десяткове число як код символу, можна воспользоват'ся наступним виразом:

Щоб пошук або заміна проводилися в рядку, що міститься в потрібній змінної, треба використовувати такий вираз:

Так, наприклад, для перетворення шістнадцяткових чисел, що містяться в змінній $ string, в десяткове подання можна використовувати інструкцію: