Perl модуль (англ. modules) — окрема програмна структура в мові програмування Perl, яка має власний простір назв, змінні, процедури та має механізм експорту визначених назв в загальний простір назв програми, до якої додається модуль. Кожний модуль має власну назву, який завдає простір назв та відбивається на файл з текстом програми модуля. Наприклад, модуль Net::Time
:
- має простір назв Net::Time;
- знаходиться в файлі
Net/Time.pm
. В Unix-подібних операційних системах, пошук модулів виконується в теках/usr/lib/perl5
,/usr/local/lib/perl5
.
В мережі існує централізоване сховище модулів CPAN, в якому зберігаються майже всі розроблені Perl-модулі.
Завдяки підтримки Perl одночасно декількох парадигм програмування, то модулі можуть бути написані як в процедурному стилі, так й в об'єктно-орієнтованому. Одночасно можуть використовуватись модулі, написані в будь-якій стиль.
Текст модуля також включає документацію по його використанню, яка оформлюється в POD форматі. За прийнятою практикою в Perl, структура POD-документації робиться робиться за структурою довідкових сторінок UNIX.
Приклад
Нижче, на прикладі класичного Hello world! наведено різні стилі організації модулів. Важливо підкреслити — модулі в Perl є необов'язковими, на відміну, наприклад, від [Java]] в якому завжди потрібно визначати клас. Можна визначити функцію «Hello, World» так:
sub hello { "Hello, world!\n" } print hello();
або скорити до однієї стрічки:
print "Hello, world!\n";
Нижче цей же приклад в різних парадигмах.
в процедурному стилі
Приклад показує оформлення модуля із застосуванням процедурного стиля.
Код програми з підключенням модуля та викликом функції.
#!/usr/bin/perl # Підключення модуля та імпорт всіх його публічних функцій в простір назв програми use Hello::World; # підключення модуля print hello(); # друкує з модуля "Hello, world!\n" print hello("Milky Way"); # друкує "Hello, Milky Way!\n"
Текст модуля Hello/World.pm
.
package Hello::World; # Назва модуля й одночасно простір назв, де будуть знаходиться всі об'єкти модуля use strict; # включення перевірки, що всі зміні попередньо визначені та мають початкові значення use warnings; # показувати всі попередження компілятора - зазвичай, вони не відображаються, так як # вважається що виконується скрипт користувача our $VERSION = '1.00'; # версія модуля, зберігається в $ModuleName::VERSION use base 'Exporter'; # підключення механізму експорту назв об'єктів модуля в простір програми our @EXPORT = qw(hello); # в масиві перераховуємо назви, які експортуємо # Строки, що починаються із символу "=" є ознакою, що далі пішов текст документації # в форматі POD, до стрічки, яка має починатись з "=cut" =head1 NAME Hello::World - An encapsulation of a common output message =head1 SYNOPSIS use Hello::World; print hello(); print hello("Milky Way"); =head1 DESCRIPTION Це процедурний модуль, який друкує привітання тому, кому вказано в параметрі процедури. Інакше - просто "Hello, world!" =head2 Functions Доступні наступні функції =head3 hello print hello(); print hello($target); Друкує привітання. Якщо C<$target> пусте, то замість нього використовується "world". =cut # безпосередньо сам код функції hello() sub hello { my $target = shift; $target = 'world' unless defined $target; return "Hello, $target!\n"; } =head1 AUTHOR Joe Hacker <joe@joehacker.org> =cut # Важливо! Кожний модуль Perl має повертати ознаку, що він успішно завантажений. # Це будь-яке значення, яке не "0" та не пусте. Інакше він не буде завантажений. 1;
в об'єктно-орієнтовному стилі
Приклад показує оформлення модуля із застосуванням об'єктно-орієнтованого стиля (надалі — ОО). Перевага модуля OO полягає в тому, що кожен об'єкт може бути налаштований незалежно від інших об'єктів.
Код програми із створенням об'єкта та викликом метода.
#!/usr/bin/perl use Hello::World; my $hello = Hello::World->new; $hello->print; # друкує "Hello, world!\n" $hello->target("Milky Way"); $hello->print; # друкує "Hello, Milky Way!\n" my $greeting = Hello::World->new(target => "Pittsburgh"); # створюємо інший об'єкт $greeting->print; # надрукує "Hello, Pittsburgh!\n" $hello->print; # все ще надрукує "Hello, Milky Way!\n"
Текст модуля Hello/World.pm
# Perl не має окремого визначення класу, на зразок зарезервованого слова 'class', # простір назв і є клас. package Hello::World; use strict; use warnings; our $VERSION = "1.00"; =head1 NAME Hello::World - узагальнене привітання =head1 SYNOPSIS use Hello::World; my $hello = Hello::World->new(); $hello->print; =head1 DESCRIPTION Об'єктно-орієнтована бібліотека, що надає класичне "Hello word!" повідомлення. =head2 Methods =head3 new my $hello = Hello::World->new(); my $hello = Hello::World->new( target => $target ); Екземпляри об'єкту, що містять привітання. Якщо C<$target> визначено, то воно передається в C<< $hello->target >>. =cut # Конструктор об'єкта зазвичай має назву new(). Проте їм може бути будь-який метод # і конструкторів може бути декілька sub new { my($class, %args) = @_; my $self = bless({}, $class); my $target = exists $args{target} ? $args{target} : "world"; $self->{target} = $target; return $self; } =head3 target my $target = $hello->target; $hello->target($target); Встановлює та повертає значення повідомлення. =cut sub target { my $self = shift; if( @_ ) { my $target = shift; $self->{target} = $target; } return $self->{target}; } =head3 to_string my $greeting = $hello->to_string; Повертає $greeting як строку. =cut sub to_string { my $self = shift; return "Hello, $self->{target}!"; } =head3 print $hello->print; Виводить привітання в стандартний потік STDOUT =cut sub print { my $self = shift; print $self->to_string(), "\n"; } =head1 AUTHOR Joe Hacker <joe@joehacker.org> =cut 1;
Посилання
Ця стаття не містить . (вересень 2018) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Perl modul angl modules okrema programna struktura v movi programuvannya Perl yaka maye vlasnij prostir nazv zminni proceduri ta maye mehanizm eksportu viznachenih nazv v zagalnij prostir nazv programi do yakoyi dodayetsya modul Kozhnij modul maye vlasnu nazvu yakij zavdaye prostir nazv ta vidbivayetsya na fajl z tekstom programi modulya Napriklad modul Net Time maye prostir nazv Net Time znahoditsya v fajli Net Time pm V Unix podibnih operacijnih sistemah poshuk moduliv vikonuyetsya v tekah usr lib perl5 usr local lib perl5 V merezhi isnuye centralizovane shovishe moduliv CPAN v yakomu zberigayutsya majzhe vsi rozrobleni Perl moduli Zavdyaki pidtrimki Perl odnochasno dekilkoh paradigm programuvannya to moduli mozhut buti napisani yak v procedurnomu stili tak j v ob yektno oriyentovanomu Odnochasno mozhut vikoristovuvatis moduli napisani v bud yakij stil Tekst modulya takozh vklyuchaye dokumentaciyu po jogo vikoristannyu yaka oformlyuyetsya v POD formati Za prijnyatoyu praktikoyu v Perl struktura POD dokumentaciyi robitsya robitsya za strukturoyu dovidkovih storinok UNIX PrikladNizhche na prikladi klasichnogo Hello world navedeno rizni stili organizaciyi moduliv Vazhlivo pidkresliti moduli v Perl ye neobov yazkovimi na vidminu napriklad vid Java v yakomu zavzhdi potribno viznachati klas Mozhna viznachiti funkciyu Hello World tak sub hello Hello world n print hello abo skoriti do odniyeyi strichki print Hello world n Nizhche cej zhe priklad v riznih paradigmah v procedurnomu stili Priklad pokazuye oformlennya modulya iz zastosuvannyam procedurnogo stilya Kod programi z pidklyuchennyam modulya ta viklikom funkciyi usr bin perl Pidklyuchennya modulya ta import vsih jogo publichnih funkcij v prostir nazv programi use Hello World pidklyuchennya modulya print hello drukuye z modulya Hello world n print hello Milky Way drukuye Hello Milky Way n Tekst modulya Hello World pm package Hello World Nazva modulya j odnochasno prostir nazv de budut znahoditsya vsi ob yekti modulya use strict vklyuchennya perevirki sho vsi zmini poperedno viznacheni ta mayut pochatkovi znachennya use warnings pokazuvati vsi poperedzhennya kompilyatora zazvichaj voni ne vidobrazhayutsya tak yak vvazhayetsya sho vikonuyetsya skript koristuvacha our VERSION 1 00 versiya modulya zberigayetsya v ModuleName VERSION use base Exporter pidklyuchennya mehanizmu eksportu nazv ob yektiv modulya v prostir programi our EXPORT qw hello v masivi pererahovuyemo nazvi yaki eksportuyemo Stroki sho pochinayutsya iz simvolu ye oznakoyu sho dali pishov tekst dokumentaciyi v formati POD do strichki yaka maye pochinatis z cut head1 NAME Hello World An encapsulation of a common output message head1 SYNOPSIS use Hello World print hello print hello Milky Way head1 DESCRIPTION Ce procedurnij modul yakij drukuye privitannya tomu komu vkazano v parametri proceduri Inakshe prosto Hello world head2 Functions Dostupni nastupni funkciyi head3 hello print hello print hello target Drukuye privitannya Yaksho C lt target gt puste to zamist nogo vikoristovuyetsya world cut bezposeredno sam kod funkciyi hello sub hello my target shift target world unless defined target return Hello target n head1 AUTHOR Joe Hacker lt joe joehacker org gt cut Vazhlivo Kozhnij modul Perl maye povertati oznaku sho vin uspishno zavantazhenij Ce bud yake znachennya yake ne 0 ta ne puste Inakshe vin ne bude zavantazhenij 1 v ob yektno oriyentovnomu stili Priklad pokazuye oformlennya modulya iz zastosuvannyam ob yektno oriyentovanogo stilya nadali OO Perevaga modulya OO polyagaye v tomu sho kozhen ob yekt mozhe buti nalashtovanij nezalezhno vid inshih ob yektiv Kod programi iz stvorennyam ob yekta ta viklikom metoda usr bin perl use Hello World my hello Hello World gt new hello gt print drukuye Hello world n hello gt target Milky Way hello gt print drukuye Hello Milky Way n my greeting Hello World gt new target gt Pittsburgh stvoryuyemo inshij ob yekt greeting gt print nadrukuye Hello Pittsburgh n hello gt print vse she nadrukuye Hello Milky Way n Tekst modulya Hello World pm Perl ne maye okremogo viznachennya klasu na zrazok zarezervovanogo slova class prostir nazv i ye klas package Hello World use strict use warnings our VERSION 1 00 head1 NAME Hello World uzagalnene privitannya head1 SYNOPSIS use Hello World my hello Hello World gt new hello gt print head1 DESCRIPTION Ob yektno oriyentovana biblioteka sho nadaye klasichne Hello word povidomlennya head2 Methods head3 new my hello Hello World gt new my hello Hello World gt new target gt target Ekzemplyari ob yektu sho mistyat privitannya Yaksho C lt target gt viznacheno to vono peredayetsya v C lt lt hello gt target gt gt cut Konstruktor ob yekta zazvichaj maye nazvu new Prote yim mozhe buti bud yakij metod i konstruktoriv mozhe buti dekilka sub new my class args my self bless class my target exists args target args target world self gt target target return self head3 target my target hello gt target hello gt target target Vstanovlyuye ta povertaye znachennya povidomlennya cut sub target my self shift if my target shift self gt target target return self gt target head3 to string my greeting hello gt to string Povertaye greeting yak stroku cut sub to string my self shift return Hello self gt target head3 print hello gt print Vivodit privitannya v standartnij potik STDOUT cut sub print my self shift print self gt to string n head1 AUTHOR Joe Hacker lt joe joehacker org gt cut 1 PosilannyaCya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno veresen 2018