Perl

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Perl
Programming-republic-of-perl.png
Дата появи: 1987
Творці: Ларрі Волл (Larry Wall)
Останній реліз: 5.18 (18 травня 2013; 338 днів тому)
Система типізації: 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 модулів понад 8,000 авторів. CPAN широко розглядається як одна з найбільших практичних переваг Perl.

Назва[ред.ред. код]

Perl спершу мав назву «Pearl», на честь притчі про перли з Євангеліє від Матвія. Ларрі Волл шукав для мови коротку назву з можливими конотаціями; він стверджує, що перебрав (і відкинув) усі три- і чотирибуквенні слова англійської мови. Він також у свій час планував дати мові ім'я Gloria, на честь своєї дружини. Волл довідався, що на момент виходу першої версії мови Perl, вже існувала мова PEARL, через що йому довелося змінити написання назви, не змінивши її вимови.

Говорячи про мову, назва, як правило, капіталізуються (Perl). Коли ж мова йде про інтерпретатор мови, назва декапіталізується (perl) оскільки Unix-подібні файлові системи є залежними від регістру. До виходу першого видання книги Programming Perl, назва мови писалася, як perl; Однак, Рональд Шварц (Randal L. Schwartz) написав її назву у своїй книзі з великої літери, мотивуючи це тим, що таким чином вона виглядає більш привабливо. Пізніше такий варіант прижився, і став, де-факто, стандартним.[12]

Інколи ім'я пишуть великими літерами «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 системах і виконання їх на Веб-сервері.

Приклад програми[ред.ред. код]

Перл часто використовується для перетворення форматів файлів. Наведена нижче програма перетворює «Infobox Town AT» (збережений в файлі city.txt) англійської вікіпедії в Картку:Місто української, створюючи майже готову сторінку.

# /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.

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

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