Perl

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Perl
Programming-republic-of-perl.png
Дата появи: 1987
Творці: Ларрі Уолл (Larry Wall)
Останній реліз: 5.20 (27 травня 2014; 206 днів тому)
Система типізації: Dynamic
Під впливом від: C, sed, AWK, shell
Вплинула на: Python, PHP, Ruby, ECMAScript, Dao
ОС: багатоплатформова
Ліцензія: GNU General Public License, Artistic License
Сторінка інтернет: www.perl.org

Perl (неофіційна[1] розшифровка англ. Practical Extraction and Reporting Language[2] — практична мова витягів та звітів) — високорівнева, інтерпретована, динамічна мова програмування загального призначення. Perl було розроблено у 1987 році Ларі Уоллом, лінгвістом і програмістом за освітою, який у той час працював системним адміністратором у NASA, як скриптова мова для Unix, метою якої було полегшити процес обробки текстів файлів журналів[3][4]. З того часу до мови було внесено багато змін, і здійснено перегляд її концепції та архітектури, в результаті чого вона стала дуже популярною серед програмістів. Ларі Уолл продовжує працювати над ядром мови, і наразі очікується вихід нової версії, Perl 6.

Perl запозичує можливості багатьох інших мов програмування, як то C, shell scripting, AWK та sed[5]. Мова надає потужні можливості для обробки тексту без довільних обмежень на довжину даних багатьох сучасних інструментів Unix[6]. полегшує маніпуляції з текстовими файлами. Застосовується для програмування графіки, системного адміністрування, у мережному програмуванні, для програмного забезпечення, яке взаємодіє з базами даних, у програмуванні CGI для веб. Perl за свою гнучкість і потужність отримав прізвисько «швейцарського армійського ножа мов програмування»[7].

Історія[ред.ред. код]

Ларрі Уолл розпочав роботу над Perl 1987 року, коли працював програмістом у компанії Unisys[8], 18 грудня того ж року, у поштовій розсилці comp.sources.misc від повідомив про вихід версії 1.0[9]. Наступні два роки мова стрімко розвивалась, і вже наступного року було випущено версію 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[10].

Perl 5 було випущено 17 жовтня 1994 року. У цій версії було повністю переписано інтерпретатор, а до самої мови було додано багато нових можливостей, включно з об'єктами, лексичними (my) змінними й підтримкою модулів. Модулі являли собою механізм розширення мови без змін інтерпретатора. Це дозволило з часом стабілізувати код інтерпретатора, а стороннім розробникам працювати над розширенням можливостей мови.

На сьогодні, Perl 5 і досі підтримується і є основною гілкою мови. Пізніше до неї було додано багато нових можливостей, як то підтримка Unicode, потоків, покращено підтримку об'єктно-орієнтованого програмування та багато іншого.

18 грудня 2007 року, рівно через 20 років після виходу Perl 1.0, було повідомлено про вихід Perl 5.10.0. До нього увійшло багато нововведень, які наблизили мову за своїми можливостями до Perl 6, серед них, перемикач станів (який іменують «given/when»), покращення підтримки регулярних виразів, оператор ~~ та чимало іншого[11].

Однієї із найважливіших подій в історії 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) написав її назву у своїй книзі з великої літери, мотивуючи, що таким чином вона виглядає більш привабливо. Пізніше такий варіант прижився, і став, де-факто, стандартним[12]. Коли йдеться власне про мову програмування, її назву пишуть із великої літери (капіталізовано): Perl. Коли ж мова йде про інтерпретатор мови, його назву пишуть з маленької (декапіталізовано): perl, оскільки Unix-подібні файлові системи є залежними від регістру.

Інколи назву пишуть великими літерами «PERL». Такий спосіб офіційна документація вважає неправильним[12], а деякі члени спільноти вважають його своєрідною ознакою чужинців[13]. Попри те, що Perl часто вважають акронімом для Practical Extraction and Report Language (який часто вживається в документації[14]), це насправді бекронім; деякі інші розшифровки згодом стали канонічними, наприклад, жарт Ларрі Уолла Pathologically Eclectic Rubbish Lister[15]. Однак, Уолл стверджує, що таку назву було обрано для того, щоб надихнути програмістів до вигадування інших розшифровок цього акроніму[16].

Зображення верблюда[ред.ред. код]

Книга Programming Perl, опублікована видавництвом O'Reilly Media, містила на своїй обкладинці зображення верблюда, через що отримала назву The Camel Book[8]. Нині це зображення є символом мови Perl.

Це також хакерська емблема, яку часто малюють на футболках, бейсболках, наплічниках тощо.

Це зображення є торговою маркою, правами на яку володіє O'Reilly. Однак, компанія дозволяє вільно його використовувати, і стверджує, що утримує права на нього виключно з метою захисту від використання емблеми з іншою метою[17]. Однак, зображення верблюда ніколи не було офіційним символом мови Perl[18].

Огляд[ред.ред. код]

Perl — мова програмування загального призначення, котра на початку розроблялась, як інструмент для обробки текстів, а тепер застосовується для вирішення дуже широкого кола завдань, включно з системним адмініструванням, веб-розробкою, розробкою мережевого програмного забезпечення, та програмного забезпечення з графічним інтерфейсом користувача.

Мова надає перевагу практичному (простота у використанні, ефективність, повнота) над гарним (крихітність, елегантність, мінімалістичність)[19]. Вона має багато можливостей, включно з підтримкою кількох парадигм програмування (процедурне програмування, об'єктно-орієнтоване програмування а також функціональне програмування), управлінням пам'яттю, вбудованою підтримкою системи обробки текстів і великим набором сторонніх модулів.

Згідно зі словами Ларрі Уолла, Perl має два гасла. Перше — «Є більше одного способу щось зробити» (англ. «There's more than one way to do it»), більше відомий, як TMTOWTDI, а також «Легкі речі мають лишатися легкими, а важкі мають бути можливими» (англ. «Easy things should be easy and hard things should be possible»).[20]

Особливості[ред.ред. код]

Загальна структура програм на мові Perl була запозичена у С. Perl є типовою процедурною мовою, зі змінними, виразами, присвоюваннями, дужками-розділювачами, блоками, циклами та підпрограмами.

Perl також запозичив деякі особливості з shell-програмування. Назви всіх змінних починаються з особливих знаків, кожен з яких характеризує певний тип даних (наприклад, скаляри, масиви та хеш-таблиці). Важливо зазначити, що це дозволяє правильно інтерпретувати назви змінних безпосередньо в тексті програм. Perl має багато вбудованих функцій, які забезпечують програміста інструментарієм, котрий часто використовується у shell-програмуванні (хоча, багато з цих інструментів реалізовано за допомогою зовнішніх програм), як то сортування або виклик зовнішніх програм.

Perl запозичив списки з мови Lisp, асоціативні масиви (хеші) з AWK, і регулярні вирази з sed. Це спростило процес парсингу й обробки великих обсягів текстової інформації.

У Perl 5 було додано підтримку складних структур даних, функції першого класу й об'єктно-орієнтованої моделі програмування, яка включає посилання, пакунки та ін. Серед найбільших нововведень у Perl 5 відзначають підтримку модулів, які дозволяють застосовувати код повторно. Ларрі Уолл пізніше сказав: «Додання до Perl 5 підтримки модулів було здійснено з метою стимулювати зростання культури Perl, а не самої мови.»[21]

Усі версії 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. Lapworth, Leo. «General Questions About Perl». Perl FAQ. Perl.org. Архів оригіналу за 2013-06-22. Процитовано 2012-02-24. 
  2. «perl(1): Practical Extraction/Report Language — Linux man page». Архів оригіналу за 2013-06-22. 
  3. What is Perl?
  4. perl.com: Beginner's Introduction to Perl
  5. Ashton, Elaine (1999). «The Timeline of Perl and its Culture (v3.0_0505)». Архів оригіналу за 2013-05-12. 
  6. Wall, Larry, Tom Christiansen and Jon Orwant (July 2000). Programming Perl, Third Edition. O'Reilly. ISBN 0-596-00027-8. 
  7. Sheppard, Doug (2000-10-16). «Beginner's Introduction to Perl». O'Reilly Media. Архів оригіналу за 2013-05-12. Процитовано 2008-07-27. 
  8. а б «Larry Wall». Процитовано 2006-08-20. 
  9. «Perl, a «replacement» for awk and sed». Процитовано 2007-12-18. 
  10. `perl5-porters' Mailing List Archive
  11. perldelta—what is new for perl 5.10.0
  12. а б «perlfaq1: What's the difference between «perl» and «Perl»?». Архів оригіналу за 2013-05-12. 
  13. Schwartz, Randal. «PERL as shibboleth and the Perl community». Архів оригіналу за 2013-06-22. Процитовано 2007-06-01. 
  14. Wall, Larry. «Larry Wall». Архів оригіналу за 2013-06-22. Процитовано 2008-10-02. 
  15. Wall, Larry. «BUGS». perl(1) man page. Архів оригіналу за 2013-06-22. Процитовано 2006-10-13. 
  16. Wall, Larry. «Re^7: PERL as shibboleth and the Perl community». Архів оригіналу за 2013-06-22. Процитовано 2007-01-03. 
  17. O'Reilly—The Perl Camel Usage and Trademark Information
  18. Perl Trademark, User Logos, Perl Marks and more
  19. perlintro (1) man (Unix)
  20. With Larry Wall, Creator Of Perl
  21. Usenet post, May 10th 1997, with ID 199705101952.MAA00756@wall.org.

Ресурси Інтернет[ред.ред. код]

Заходи[ред.ред. код]