Perl
Perl | |
---|---|
Парадигма | мультипарадигмальна, функціональна, імперативна, об'єктно-орієнтована |
Дата появи | 1987 |
Творці | Ларрі Волл (Larry Wall) |
Розробник | Ларі Уолл |
Останній реліз | 5.32.0 (20 червня 2020 ) |
Система типізації | Динамічна |
Під впливом від | C, sed, AWK, shell |
Вплинула на | Python, PHP, Ruby, ECMAScript, JavaScript |
Мова реалізації | C[https://www.openhub.net/p/perl/analyses/latest/languages_summary_The_perl_Open_Source_Project_on_Open_Hub:_Languages_Page] |
Операційна система | багатоплатформова |
Ліцензія | GNU General Public License, Artistic License |
Звичайні розширення файлів | .pl, pm, xs, pod, plx, t |
Репозиторій вихідного коду | perl5.git.perl.org/perl.git github.com/Perl/perl5 |
Вебсайт | www.perl.org |
Perl (неофіційна[4] розшифровка англ. Practical Extraction and Reporting Language[5] — практична мова витягів та звітів) — високорівнева, інтерпретована, динамічна мова програмування загального призначення. Perl було розроблено у 1987 році Ларі Воллом, лінгвістом і програмістом за освітою, який у той час працював системним адміністратором у NASA, як скриптова мова для Unix, метою якої було полегшити процес обробки текстів файлів журналів[6][7]. З того часу до мови було внесено багато змін, і здійснено перегляд її концепції та архітектури, в результаті чого вона стала дуже популярною серед програмістів. Ларі Волл продовжує працювати над ядром мови, і наразі очікується вихід нової версії, Perl 6.
Perl запозичує можливості багатьох інших мов програмування, як то C, shell scripting, AWK та sed[8]. Мова надає потужні можливості для обробки тексту без довільних обмежень на довжину даних багатьох сучасних інструментів Unix[9]. полегшує маніпуляції з текстовими файлами. Застосовується для програмування графіки, системного адміністрування, у мережному програмуванні, для програмного забезпечення, яке взаємодіє з базами даних, у програмуванні CGI для веб. Perl за свою гнучкість і потужність отримав прізвисько «швейцарського армійського ножа мов програмування»[10].
Ларрі Волл розпочав роботу над Perl 1987 року, коли працював програмістом у компанії Unisys[11], 18 грудня того ж року, у поштовій розсилці comp.sources.misc від повідомив про вихід версії 1.0[12]. Наступні два роки мова стрімко розвивалась, і вже наступного року було випущено версію 2.0, основним нововведенням якої була поліпшена робота з регулярними виразами. Perl 3 вийшов 1989 року, у ньому було додано підтримку двійкових потоків даних.
Спершу документація по Perl являла собою лиш одну сторінку підручника man. 1991 року було опубліковано книгу Programming Perl (відому багатьом програмістам під назвою «Camel Book»), яка невдовзі стала, де-факто, стандартним посібником для мови Perl. Разом з тим, було випущено Perl версії 4.0, у якому не було серйозних нововведень, лише нова документація.
Після цього була серія випусків, що містили виключно виправлення знайдених помилок, яка завершилась 1993 року виходом Perl версії 4.036. Після цього Ларрі Волл закинув Perl 4 і розпочав роботу над Perl 5.
Початковий етап роботи над дизайном Perl 5 було завершено 1994 року. Того ж року, для координації роботи по портуванню Perl 5 на різні платформи, було відкрито поштову розсилку The perl5-porters[13].
Perl 5 було випущено 17 жовтня 1994 року. У цій версії було повністю переписано інтерпретатор, а до самої мови було додано багато нових можливостей, включно з об'єктами, лексичними (my) змінними й підтримкою модулів. Модулі являли собою механізм розширення мови без змін інтерпретатора. Це дозволило з часом стабілізувати код інтерпретатора, а стороннім розробникам працювати над розширенням можливостей мови.
На сьогодні, Perl 5 і досі підтримується і є основною гілкою мови. Пізніше до неї було додано багато нових можливостей, як то підтримка Unicode, потоків, покращено підтримку об'єктно-орієнтованого програмування та багато іншого.
18 грудня 2007 року, рівно через 20 років після виходу Perl 1.0, було повідомлено про вихід Perl 5.10.0. До нього увійшло багато нововведень, які наблизили мову за своїми можливостями до Perl 6, серед них, перемикач станів (який іменують «given/when»), покращення підтримки регулярних виразів, оператор ~~ та чимало іншого[14].
Однієї із найважливіших подій в історії Perl 5 було додання підтримки модулів. 26 жовтня 1995 року, було відкрито Comprehensive Perl Archive Network (CPAN), яка стала репозиторієм модулів для Perl. На травень 2010 репозиторій містив понад 17 750 модулів більш як 8000 авторів. CPAN широко розглядається як одна з найбільших практичних переваг Perl.
Свого часу Ларрі Волл планував назвати мову Gloria, на честь своєї дружини, але шукав коротку назву з можливими конотаціями; він стверджує, що перебрав (і відкинув) усі три- й чотирилітерні слова англійської мови. Тож спершу мова називалася «Pearl», із притчі про перли з Євангеліє від Матвія. Однак Волл довідався, що на час виходу першої версії, вже існувала мова PEARL[en], через що йому довелося змінити написання назви, не змінюючи її вимови.
До публікації першого видання книги Programming Perl, назва мови писалася як perl (з маленької літери). Однак, Рональд Шварц (Randal L. Schwartz) у своїй книзі написав назву мови з великої, мотивуючи, що так вона виглядає привабливіше. Пізніше такий варіант прижився, і став, де-факто, стандартним[15]. Коли йдеться власне про мову програмування, її назву пишуть із великої літери (капіталізовано): Perl. Коли ж мова йде про інтерпретатор мови, його назву пишуть з маленької (декапіталізовано): perl, оскільки Unix-подібні файлові системи є залежними від регістру.
Інколи назву пишуть великими літерами «PERL». Такий спосіб офіційна документація вважає неправильним[15], а деякі члени спільноти вважають його своєрідною ознакою чужинців[16]. Попри те, що Perl часто вважають акронімом для Practical Extraction and Report Language (який часто вживається в документації[17]), це насправді бекронім; деякі інші розшифровки згодом стали канонічними, наприклад, жарт Ларрі Волла Pathologically Eclectic Rubbish Lister[18]. Однак, Волл стверджує, що таку назву було обрано для того, щоб надихнути програмістів до вигадування інших розшифровок цього акроніму[19].
Книга Programming Perl, опублікована видавництвом O'Reilly Media, містила на своїй обкладинці зображення верблюда, через що отримала назву The Camel Book[11]. Нині це зображення є символом мови Perl.
Це також хакерська емблема, яку часто малюють на футболках, бейсболках, наплічниках тощо.
Це зображення є торговою маркою, правами на яку володіє O'Reilly. Однак, компанія дозволяє вільно його використовувати, і стверджує, що утримує права на нього виключно з метою захисту від використання емблеми з іншою метою[20]. Однак, зображення верблюда ніколи не було офіційним символом мови Perl[21].
Perl — мова програмування загального призначення, котра на початку розроблялась, як інструмент для обробки текстів, а тепер застосовується для вирішення дуже широкого кола завдань, включно з системним адмініструванням, веброзробкою, розробкою мережевого програмного забезпечення, та програмного забезпечення з графічним інтерфейсом користувача.
Мова надає перевагу практичному (простота у використанні, ефективність, повнота) над гарним (крихітність, елегантність, мінімалістичність)[22]. Вона має багато можливостей, включно з підтримкою кількох парадигм програмування (процедурне програмування, об'єктно-орієнтоване програмування а також функціональне програмування), управлінням пам'яттю, вбудованою підтримкою системи обробки текстів і великим набором сторонніх модулів.
Згідно зі словами Ларрі Волла, Perl має два гасла. Перше — «Є більше одного способу це зробити» (англ. «There's more than one way to do it»), більше відомий, як TMTOWTDI, а також «Легкі речі мають лишатися легкими, а важкі мають бути можливими» (англ. «Easy things should be easy and hard things should be possible»).[23]
Загальна структура програм на мові Perl була запозичена у С. Perl є типовою процедурною мовою, зі змінними, виразами, присвоюваннями, дужками-розділювачами, блоками, циклами та підпрограмами.
Perl також запозичив деякі особливості з shell-програмування. Назви всіх змінних починаються з особливих знаків, кожен з яких характеризує певний тип даних (наприклад, скаляри, масиви та хеш-таблиці). Важливо зазначити, що це дозволяє правильно інтерпретувати назви змінних безпосередньо в тексті програм. Perl має багато вбудованих функцій, які забезпечують програміста інструментарієм, котрий часто використовується у shell-програмуванні (хоча, багато з цих інструментів реалізовано за допомогою зовнішніх програм), як то сортування або виклик зовнішніх програм.
Perl запозичив списки з мови Lisp, асоціативні масиви (хеші) з AWK, і регулярні вирази з sed. Це спростило процес парсингу й обробки великих обсягів текстової інформації.
У Perl 5 було додано підтримку складних структур даних, функції першого класу й об'єктно-орієнтованої моделі програмування, яка включає посилання, пакунки та ін. Серед найбільших нововведень у Perl 5 відзначають підтримку модулів, які дозволяють застосовувати код повторно. Ларрі Волл пізніше сказав: «Додання до Perl 5 підтримки модулів було здійснено з метою стимулювати зростання культури Perl, а не самої мови.»[24]
Усі версії Perl здійснюють автоматичну типізацію змінних і управління пам'яттю. Інтерпретатор знає про тип та способи зберігання усіх об'єктів даних у програмі.
Дизайн Perl можна описати, як відповідь на три основні тенденції в комп'ютерної індустрії: зниження вартості апаратного забезпечення, зростання вартості робочої сили, а також вдосконалення технології компіляторів. Багато ранніх мов програмування, як то Fortran та C, були розроблені таким чином, щоб якомога ефективніше використовувати апаратне забезпечення (на той час дуже дороге). На противагу, Perl було розроблено для підвищення ефективності роботи програмістів, чий час став дорожчим від машинного.
Perl має багато можливостей, які збільшують ефективність програміста за рахунок інтенсивного використання мікропроцесора та великих обсягів оперативної пам'яті. Серед них: автоматичне управління пам'яттю, динамічна типізація, стрічки, списки, та хеші, регулярні вирази, самоаналіз та функція eval().
Ларі Уол має лінгвістичну освіту і проектував Perl з використанням багатьох принципів лінгвістики. Наприклад, використовуючи кодування Хаффмана (основні конструкції повинні бути короткими), хороше закінчення зважування (основна інформація повинна бути першою) і велику колекцію мовних примітивів. Perl підтримує мовні конструкції, які є короткими й природними для читання й написання людьми, навіть якщо це ускладнює реалізацію інтерпретатора Perl.
Синтаксис Perl має багато спільного з синтаксисом мов Сі, Awk, Sed і Shell. Перший рядок початкового коду може починатися з «#!/Шлях/до/Perl [-ключі]» — що вказує системі шлях до інтерпретатора Perl для виконання програми в *NIX системах і виконання їх на Вебсервері.
Перл часто застосовується для перетворення форматів файлів. Наведена нижче програма перетворює файл city.txt (в якому збережено «Infobox Town AT» з англійської Вікіпедії) на Шаблон:Місто української Вікіпедії, створюючи майже готову статтю.
# /usr/bin/perl
$country = 'Австрія';
$region = 'Каринтія';
$town = '{{subst:PAGENAME}}';
open (MTC,"city.txt");
while ($line = <MTC>)
{
if ($line =~ m/^[\{\}]/)
{
}
else
{
($name1, $name2, $res) = split(/=/, $line,3);
$name1 =~ s/\s//;
$name2 =~ s/\n//;
$name2 =~ s/\|//;
$name2 =~ s/\s $//;
if ($name1 eq 'name')
{$town_local = $name2;}
if ($name1 eq 'image_coa')
{$coat = $name2;}
if ($name1 eq 'postal_code')
{$postal_code = $name2;}
if ($name1 eq 'population')
{$population = $name2;}
if ($name1 eq 'pop_dens')
{$population_density = $name2;
$population_density =~ s/\./\,/;}
if ($name1 eq 'area')
{
$area = $name2;
$area =~ s/\./\,/;
}
if ($name1 eq 'lat_deg')
{$lat_deg = $name2;}
if ($name1 eq 'lat_min')
{$lat_min = $name2;}
if ($name1 eq 'lon_deg')
{$lon_deg = $name2;}
if ($name1 eq 'lon_min')
{$lon_min = $name2;}
if ($name1 eq 'area_code')
{$city_code = $name2;}
if ($name1 eq 'mayor')
{$mayor = $name2;}
if ($name1 eq 'website')
{$web = $name2;}
}
print<<EndCard
\{\{Місто
| назва = $town
| місцева_назва = $town_local
| зображення = $image
| зображення_розмір = $image_size
| зображення_підпис = $caption
| прапор = $flag
| прапор_підпис = $flag_caption
| герб = $coat
| герб_підпис = $coat_caption
| країна = $country
| регіон = $region
| розташування = $location
| розташування_розмір = $location_size
| засноване = $foundation
| статус = $status
| магдебурзьке право = $magdeburg
| населення = $population
| густота = $population_density
| агломерація = $aglomeration
| площа = $area
| поштові індекси = $postal_code
| код країни = $country_code
| код міста = $city_code
| координати = \{\{Coor dms |$lat_deg\|$lat_min\|$lat_sec\|N\|$lon_deg\|$lon_min\|$lon_sec\|E\|/scale:30000\}\}
| поділ міста = $structure
| міста-побратими = $twins
| день міста = $day
| адреса = $address
| вебсторінка = $web
| мер = $mayor
}}
'''\{\{\subst:PAGENAME}\}''' (\{\{lang-de\|$town_local\}\}) - місто в федеральній землі [[Каринтія]], [[Австрія]].
\{\{geo-stub\}\}
\[\[Категорія:Міста Австрії\]\]
\[\[de:$town_local\]\]
EndCard
;
- Perl.org [Архівовано 30 червня 2005 у Wayback Machine.] — офіційний майданчик тенет
- Документації по Perl [Архівовано 30 січня 2009 у Wayback Machine.]
- The Perl Foundation
- Офіційна Wiki мови Perl 5
- Perl, каталог посилань Open Directory Project
- український воркшоп «Perl Mova» [Архівовано 20 жовтня 2015 у Wayback Machine.]