Создание пакетів і модулів в Perl
Защищенность і модульність — два великих принципу програмування. Perl забезпечує їх виконання, надаючи можливість розбивати програму на напівавтономні фрагменти отже програмісту зайве турбуватися про конфліктах з-поміж них і рештою програми. Для розподілу програми на незалежні фрагменти використовуються пакети Perl, які створюють непересічні області імен (namespaces). Що таке область імен? Це… Читати ще >
Создание пакетів і модулів в Perl (реферат, курсова, диплом, контрольна)
Создание пакетів і модулів в Perl
В цій статті ми розглянемо процес створення пакетів і модулів і як прикладу створимо один найпростіший модуль і пакет.
Intro
Защищенность і модульність — два великих принципу програмування. Perl забезпечує їх виконання, надаючи можливість розбивати програму на напівавтономні фрагменти отже програмісту зайве турбуватися про конфліктах з-поміж них і рештою програми. Для розподілу програми на незалежні фрагменти використовуються пакети Perl, які створюють непересічні області імен (namespaces). Що таке область імен? Це інша частина програми з своєї власне областю видимості глобальних ідентифікаторів — інакше кажучи, вона функціонує як територія программиста.
На насправді в Perl немає такого речі, як «область видимості глобальних ідентифікаторів » , — будь-яка така область обмежується якимось пакетом. Створюючи пакет, у вас з’являється якусь гарантію те, що ваш код не змішається з перемінними і подпрограммами іншого фрагмента. Це дозволяє організовувати код, готовий до багаторазового використання, як пакетов.
Кроме пакетів є й модулі Perl. Моудли — це пакети, організовані спеціальним чином. Їх можна навантажувати й інтегрувати з конкретною програмою. У статті йтиметься з приводу створення модулів і пакетов.
Пакеты
Пакет можна як юнита Delphi. Код, помещаемый в окремий пакет, може розміщатися в зовнішньому файлі, у кількох файлах, хоч трохи пакетів можуть будуть показані у одному файлі (що організувати неможливо зробити на дельфийском юните). Переключатися між різними пакетами всередині файла потрібно з допомогою команди package. Створімо простий пакет і збережемо його як package1. pl:
package package1;
BEGIN { }.
sub subroutine1 {print «Hello!n » ;}.
return 1;
END { }.
Команда package починає новий пакет package1. Зверніть увагу до підпрограми BEGIN і END. Перша підпрограма виконується відразу після завантаження пакета. Тож у неї зазвичай поміщають инициализирующий код. Хоча точніше було стверджувати, що підпрограма BEGIN виконується, як лише інтерпретатор сягає неї, тобто. до закінчення завантаження пакета. А підпрограма END виконується при завершенні роботи інтерпретатора і може містити код, виконує заключні оперпации (наприклад закриття відкритих файлів. Підпрограми BEGIN і END викликаються неявним чином (більш того, вам не вдасться явно викликати BEGIN: інтерпретатор знищує її відразу після використання). Саме тому ті підпрограми складаються з заголовних літер, і ключовим словом sub їм годі й указывать.
Обратите увагу до підпрограму subroutine1. Її можна викликати не більше коду, котрий використовує пакет. З іншого боку, слід звернути увагу на команду return, розташовану поза жодних підпрограм, — вона повертає значення «істина «після завантаження пакета, показуючи в такий спосіб, що пакет готовий до роботи (на справі повертається останнє значення, розрахований у тілі пакета, тому часто замість рядки return 1 ставиться просто единица).
Что б послуговуватись у програмі код пакета, необхідно розмістити у сценарій команду require:
require «package1.pl » ;
Теперь можна посилатися на ідентифікатори пакета package1, відмежувавши його ім'я від ідентифікатора двома двокрапками ": ". Раніше у ролі роздільника був апостроф (будьмо уважні, оскільки цей роздільник використовують і зараз). Але тепер Perl слід стилю З++ і який використовує «: ». Ось приклад виклику підпрограми subroutine1 з пакету package1:
require «package1.pl » ;
package1:subroutine1();
Как результат роботи програмних засобів буде виведено напис «Hello! ». Можна ще в пакети поміщати інші ідентифікатори, наприклад переменные:
package package1;
BEGIN { }.
$var1=1;
sub subroutine1 {print «Hello!n » ;}.
return 1;
END { }.
Использовать цю зміну легко. Досить підставити символ «$ «перед конструкцією виклику. Пример:
require «package1.pl » ;
$package1:var1;
Обратите увагу, що символ «$ «ставиться перед ім'ям пакета, але НЕ ставиться після: перед var1. Проте у такий спосіб неможливо дістатись змінних, описаних з ключовим словом my: вони мають лексичній областю видимості і доступні лише усередині модуля.
При зверненні до идентификаторам можна опускати ім'я пакета, і стане використаний пакет main (рядок $:var1 еквівалентна $main:var1).
Если у програмі потрібно частенько звертатися до идентификаторам з пакетів, то код стає великим і малозрозумілим. Що би вирішити цю проблему потрібно використовувати модулі. З використанням модулів можна експортувати імена, вказаних у модулі в текущюю область имен.
Модули
Модули — це пакети, оформлені окремими файлах, які мають імена останніх збігаються із конкретними іменами модулів і мають розширення pm. За угодою Perl визначає, що ім'я модуля починається з великої літери. Код, який міститься у модулі, на відміну «пакетного «коду, може експортувати глобальні імена на текущюю область глобальних імен. Це означає, що з зверненні до ідентифікатору непотрібно вказувати ім'я пакета.
Рассмотрим приклад. Створіть модуль безпосередньо з ім'ям Module1 і cохраните їх у файлі Module1.pm. У коді підпрограми BEGIN, виконуваному за мінімального завантаження модуля, використовуватимемо стандартний модуль Exporter, що експортувати ім'я підпрограми subroutine1:
package Module1;
BEGIN {.
use Exporter ();
@ISA = «Exporter » ;
@EXPORT = «&subroutine1 » ;
}.
sub subroutine1 {print «Hello!n » ;}.
return1;
END { }.
Для використання модуля у програмі потрібно підключити його з допомогою команди «use «(він входить у момент компіляції). Якщо ж підключити модуль командою require то модуль підключиться в останній момент виконання сценарію. Пример:
use Module1;
subroutine1();
В результаті виконання цієї коду буде виведено рядок «Hello! » .
Outro
Эта стаття не претендує на повноту описи модулів і пакетів. Існує ще багато, чого ви довідалися із цієї статті: пакети можна вкладати один одного, вирішувати експортувати певні імена і експортувати їх за вмовчанням і навіть вызываь неіснуючі підпрограми. Але це тема величезної глави книжки, а то й всієї книги.
При підготовці статті було використано матеріали з оповідання «Perl. Спеціальний довідник «(автор Стівен Холзнер, видавництво «Пітер », 2001 г.).
Список литературы
Для підготовки даної праці були використані матеріали із російського сайту internet.