Perl

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з Perl (мова програмування))
Перейти до навігації Перейти до пошуку
Perl
Парадигмамультипарадигмальна, функціональна, імперативна, об'єктно-орієнтована
Дата появи1987
ТворціЛаррі Волл (Larry Wall)
РозробникЛарі Уолл[1] і The Perl Foundationd[2]
Останній реліз5.32.0 (20 червня 2020; 4 роки тому (2020-06-20))
Система типізаціїДинамічна
Під впливом відC, sed, AWK, shell
Вплинула наPython, PHP, Ruby, ECMAScript, JavaScript
Мова реалізаціїC[3]
Операційна системабагатоплатформова
Ліцензія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
;

Джерела інформації

[ред. | ред. код]
  1. http://learn.perl.org/faq/perlfaq1.html
  2. http://www.perlfoundation.org/
  3. The perl Open Source Project on Open Hub: Languages Page — 2006.
  4. Lapworth, Leo. General Questions About Perl. Perl FAQ. Perl.org. Архів оригіналу за 22 червня 2013. Процитовано 24 лютого 2012.
  5. perl(1): Practical Extraction/Report Language — Linux man page. Архів оригіналу за 22 червня 2013. Процитовано 19 травня 2013.
  6. What is Perl?. Архів оригіналу за 30 січня 2009. Процитовано 15 січня 2009.
  7. perl.com: Beginner's Introduction to Perl. Архів оригіналу за 4 червня 2008. Процитовано 15 січня 2009.
  8. Ashton, Elaine (1999). The Timeline of Perl and its Culture (v3.0_0505). Архів оригіналу за 12 травня 2013. Процитовано 15 січня 2009.
  9. Wall, Larry, Tom Christiansen and Jon Orwant (July 2000). Programming Perl, Third Edition. O'Reilly. ISBN 0-596-00027-8.
  10. Sheppard, Doug (16 жовтня 2000). Beginner's Introduction to Perl. O'Reilly Media. Архів оригіналу за 12 травня 2013. Процитовано 27 липня 2008.
  11. а б Larry Wall. Архів оригіналу за 12 березня 2006. Процитовано 20 серпня 2006.
  12. Perl, a «replacement» for awk and sed. Архів оригіналу за 2 травня 2010. Процитовано 18 грудня 2007.
  13. `perl5-porters' Mailing List Archive. Архів оригіналу за 10 серпня 2009. Процитовано 16 січня 2009.
  14. perldelta—what is new for perl 5.10.0. Архів оригіналу за 30 березня 2009. Процитовано 16 січня 2009.
  15. а б perlfaq1: What's the difference between «perl» and «Perl»?. Архів оригіналу за 12 травня 2013. Процитовано 20 січня 2009.
  16. Schwartz, Randal. PERL as shibboleth and the Perl community. Архів оригіналу за 22 червня 2013. Процитовано 1 червня 2007.
  17. Wall, Larry. Larry Wall. Архів оригіналу за 22 червня 2013. Процитовано 2 жовтня 2008.
  18. Wall, Larry. BUGS. perl(1) man page. Архів оригіналу за 22 червня 2013. Процитовано 13 жовтня 2006.
  19. Wall, Larry. Re^7: PERL as shibboleth and the Perl community. Архів оригіналу за 22 червня 2013. Процитовано 3 січня 2007.
  20. O'Reilly—The Perl Camel Usage and Trademark Information. Архів оригіналу за 26 грудня 2005. Процитовано 19 січня 2009.
  21. Perl Trademark, User Logos, Perl Marks and more. Архів оригіналу за 3 травня 2011. Процитовано 19 січня 2009.
  22. perlintro (1) man (Unix)
  23. With Larry Wall, Creator Of Perl. Архів оригіналу за 24 вересня 2015. Процитовано 5 серпня 2019.
  24. Usenet post, May 10th 1997, with ID 199705101952.MAA00756@wall.org.

Ресурси Інтернет

[ред. | ред. код]

Заходи

[ред. | ред. код]