Пърл (език за програмиране)

Perl (Пърл)
Картинка:Republic_of_perl.gif
Парадигма: функционален, обектно-ориентиран, процедурен
Излиза през: 1987
Разработен от: Лари Уол
Система типове: динамична
Главни реализации:
Диалекти:
Повлиян от: AWK, BASIC-PLUS, C, C++, Lisp, Pascal, Python, Sed, Unix shell
Повлиял: Python, PHP, Ruby
Сайт: www.perl.org

Perl (произнася се „пърл“) е универсален, интерпретиран език за програмиране, създаден от Лари Уол през 1987 г. Лари е трябвало да създава отчети за системата, която е поддържал тогава и не е имало подходящ инструмент в момента (програмата awk не е можела да отваря и затваря файлове въз основа на информацията в тях), а не му се е искало да създава специализиран инструмент. Така на бял свят се е появил нов език.


Съдържание

[редактиране] Име

Първоначално името на езика е било Pearl (произнася се по същия начин — „пърл“). Още преди да излезе първата версия на езика, Лари установява, че съществува език за програмиране на име PEARL. С цел да се избегнат конфликти, а и повлиян от характерната за философията на Юникс тенденция към кратки имена, Лари променя името на езика на Perl, без да променя произношението му.

В последствие се появяват интерпретации на името като съкращение, най-популярната от които е Practical Extraction and Report Language (в превод: практичен език за извличане и отчети). Съществуват и много други интерпретации, включително и такива от самия Лари Уол, например шеговитото Pathologically Eclectic Rubbish Lister (в превод: патологично многостранен изброител на глупости). Всички те обаче са бекроними. Името на езика не е съкращение от нищо, поради което се пише само с една главна буква — Perl, а не PERL (за разлика от споменатия език PEARL, чието име наистина е съкращение).

Съществува също така тънка разлика в значението в зависимост от това дали името е изписано с главна буква в началото или изцяло с малки букви. Perl е името на езика за програмиране, което, както (почти) всяко друго име, се пише с главна буква. Под perl се има предвид интерпретатора на езика Пърл, т.е. програмата, която се стартира, за да се изпълни даден код на Пърл. Името на интерпретатора спазва неписаното правило имената на команди под Юникс да са изцяло с малки букви.


[редактиране] Свойства на Пърл

В Пърл са заимствани концепции от доста езици — C, awk, sed, Lisp и др. Най-силните му черти са регулярните изрази (англ. regular expression, често съкращавано на regex), вградените сложни структури от данни (обикновени и асоциативни масиви) и един от най-големите в света набори от свободно достъпни модули CPAN. На Пърл може да се пише процедурно, обектно-ориентирано и функционално (поддържа обвивки, една от най-мощните абстракции в компютърната наука). Пърл е слабо типизиран език. Той е интерпретиран, като програмата първо се компилира до машиннонезависими инструкции (байткод), които се изпълняват от интерпретатора. За разлика от Java обаче, байткодът не е лесно достъпен, благодарение на което са избегнати редица проблеми с обратната съвместимост. Интерпретаторът на Пърл e написан на C и е преносим на огромен брой платформи и операционни системи. Програмата perl2exe и модулът pp могат да бъдат използвани за произвеждане (генериране) на изпълними програми от скриптове на Пърл.

[редактиране] Предимства на езика

[редактиране] Обработка на текст

Най-силната страна на Пърл е обработката на текст. Това го прави изключително популярен сред системните администратори. Операции като отваряне, четене, синтактичен разбор (известен още като „парсване“), търсене, заместване на текстови файлове са кратки и лесни за програмиране, имплементирани са много ефективно и се изпълняват по-бързо отколкото в повечето други езици.

[редактиране] Динамични уеб страници

Разработчиците на динамични уеб страници (страниците, чиито съдържание се произвежда на момента на тяхното извикване — т. е. динамично) често използват Пърл поради големия брой безплатни скриптове, както и общността на разработчици предлагащи помощ на своите колеги. Богатата библиотека с модули, споменатата мощна текстообработка, която често се налага при генерирането на HTML страници, както и фактът, че е слабо типизиран и интерпретиран език, правят възможна бързата разработка на приложения в много области, включително и настолни графични приложения.

Фактът, че Пърл се интерпретира в момента на изпълнение, налага уеб сървърът да стартира на интерпретатора perl за всяка уеб страница, която трябва да се генерира. При по-натоварени сайтове това може да доведе до значително натоварване на системата, както откъм памет, така и откъм процесорно време. За да се избегне това, специално за Пърл е създаден модула mod_perl за сървъра Apache, който на практика представлява интерпретатор за Пърл, вграден в кода на Apache. Това позволява на уеб сървъра да изпълнява код на Пърл, без да се налага да стартира нов процес за всяка заявена уеб страница. Това води до значително увеличение на производителността при намалени ресурси. Mod_perl отива дори още по-надалеч и дава на скриптовете на Пърл достъп до всички „вътрешности“ на самия Apache сървър, като им позволява да се намесват във всеки един етап от доставянето на HTML страницата, както и да използват конструкции на Пърл в конфигурационните файлове на Apache.

[редактиране] Общността CPAN

CPAN (англ. Comprehensive Perl Archive Network, в превод Изчерпателна мрежа от архиви на Пърл) представлява огромна колекция от софтуер написан изцяло или отчасти на Пърл. Основната градивна единица на този софтуер е модулът. Съществуват незадалжителни, но препоръчителни (и често спазвани на практика) указания за писането на модули за Пърл, с необходимата им документация, която често с простотата и стандартността си превъзхожда документацията на много комерсиални продукти. Разработчиците на Пърл създават програмни модули, разрешаващи разнообразни проблеми за почти всички операционни системи и дори програмни езици. Тези модули обикновено са достъпни за използване под същия лиценз, както и самия Пърл (т. нар. Artistic License), което допринася за по-нататъшното разрастване на общността. Всички тези модули могат да бъдат разледани и свалени от сайта на CPAN

[редактиране] Използване на изпълнимият файл perl или perl.exe като команден интерпретатор

Името на главният изпълним файл (т.е. интерпретатора на езика, който превръща текстовия код на Пърл в изпълними инструкции за процесора) е същото като името на програмния език, но обикновено се пише с малка буква — perl в *nix системи или perl.exe в Уиндоус системи. Този изпълним файл може да се използва за бързи изпълнения от командния ред на компютъра, който биха отнели много редове (и вероятно скорост) ако биха били изпълнени на други програмни езици. Следият списък илюстрира тези примери.

#отвори всички файлове от типа *.с и промени foo на bar
perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c 
# принтирай първите 50 страници евтино
perl -pe 'exit if $. > 50' f1 f2 f3 ... 
# изтрий първите 10 реда на файла foo.txt
perl -i.old -ne 'print unless 1 .. 10' foo.txt 
#промени реда на редовете ... на файловете file1 file2 file3 .... 
perl -e 'print reverse <>' file1 file2 file3 .... 
# промени реда на абзаците ... на файловете file1 file2 file3 .... 
perl -00 -e 'print reverse <>' file1 file2 file3 .... 
# изтрий всички други редове освен тези между START и END
perl -i.old -ne 'print unless /^START$/ .. /^END$/' foo.txt

[редактиране] Недостатъци на езика

Противниците на Пърл твърдят, че той има много неясен и дори откровено грозен синтаксис. Редицата синтактични съкращения, целящи пестене на време при писане на код, водят до безкраен брой от сложни за запомняне символи и структури. Мотото на езика „Има повече от един начин да го направиш“ се счита за основата на хаос от течения и секти, които елиминират логичността и догматичността, които би трябвало да определят развитието на един програмен език. Комбинирано със слабата типизация (която по принцип е една от силните страни на Пърл), всичко това позволява да се пише код, който по-късно е неразбираем дори за самия автор. Поради това някои наричат Пърл език „само за писане“ (англ. write-only).

Един от начините да се избегне това, е да се спазва някакъв основен набор от правила и конвенции при писането на код, които да са общоприети от всички. Фактът, че Пърл до голяма степен не налага такива правила, обаче води до възникването на много стилови „течения“ сред програмистите на Пърл, като за хората следващи даден стил е трудно да разберат код, писан в друг стил.

[редактиране] Hello, world

Примерната програма "Hello, world", реализирана на Perl, изглежда така

#!/usr/bin/perl
print "Hello, world!\n";

[редактиране] Основни типове данни

Най-използваните типове данни на Пърл са:

  • Скаларна променлива - Единична стойност, която може да бъде число, низ или препратка. За по-кратко често се нарича само "скалар".
  • Масив - Списък от скалари, означавани (т.е. номерирани) последователно, започвайки от 0. Поредният номер на даден елемент от масива се нарича индекс. Достъпът до отделни елементи от масива става единствено чрез индекси.
  • Хеш - Хешът (наричан още хеш-таблица или асоциативен масив) е множество от подредени двойки скалари. Обърнете внимание, че двойките помежду си нямат подредба или номерация, т.е. образуват математическо множество. Елементите на една конкретна двойка обаче са подредени, т.е. има първи и втори: Първият се нарича ключ (на англ. key), а вторият стойност (на англ. value). И двата скалара могат да бъдат произволни и няма нужда да са от един и същи тип. Достъпът до отделни стойности от хеша става чрез ключовете. В известен смисъл ключовете при хеша съответстват на индексите при масива. В това отношение хешът може да се разглежда като по-обща форма на масив, при която индексите не са ограничени до числа, а могат да бъдат произволни скалари. Тъй като ключовете се използват за идентификация на стойностите в хеша, те трябва да са уникални, т.е. да няма повторения. За разлика от тях, стойностите могат да се повтарят — на различни ключове могат да съответстват едни и същи стойности.
  • Файлов манипулатор - Наричан още файлов дескриптор (от англ. file descriptor или file handle), този тип променливи предоставя достъп до файл или друго поточно устройство, като например мрежова връзка, тръба (от англ. pipe), и т.н. Файловият дескриптор може да бъде отворен за писане, четене или и за двете.
  • Подпрограма - Подпрограмата (subroutine) е парче код, на който могат да се предават аргументи, той извършва някакво действие с тях и/или пресмята резултат, и накрая евентуално връща стойност (обикновено пресметнатата стойност, или нищо, ако няма такава).
#Скаларна променлива
$number = 5;
$name = "Иван";
print "$number, $name"; #Отпечатва: 5, Иван
 
#Масив
@names = ("Иван", "Петър", "Георги"); #Масивът се означава с @, но когато използваме само един от неговите скалари го означаваме като скалар (с $)
print "$names[0], $names[2] и $names[1]"; #Отпечатва: Иван, Георги и Петър
 
#Хеш
%hash = (
   'name' => 'Иван',
   'surname' => 'Георгиев',
   'city' => 'София');
print "Име: $hash['name']\nФамилия: $hash['surname']\nМестожителство: $hash['city']";
#Отпечатва:
#Име: Иван
#Фамилия: Георгиев
#Местожителство: София
 
#Файлове манипулатор
open (FILE, "http://bg.wikipedia.org/home/georgi/file.txt"); #Прието е имената на манипулаторите да се записват с главни букви за по-добра четливост.
@array = <FILE>; #Всеки ред на файла се записва като отделен елемент на масива
close FILE; 
 
#Подпрограма
sub countto {
for ($i=0;$i<=$_[0];$i++) { #Аргументите се пазят в специалния масив @_.
   print"Мога да броя до $i!\n";
}
&countto(5); #Сайджилът (Sigil, знакът означаващ типа данни, тук - амперсанд) е незадължителен
 
#Отпечатва:
#Мога да броя до 1!
#Мога да броя до 2!
#Мога да броя до 3!
#Мога да броя до 4!
#Мога да броя до 5!

[редактиране] Основни контролни структури

[редактиране] If

Контролните структури в Пърл могат да се записват по два начина. При първият кодът, който ще се изпълнява, е разположен на произволен брой редове, при другия - само на един. Ето как изглежда една примерна if контролна структура:

$today = "Пон";
if ($today == "Пон") { #Забележете, че когато извършваме проверка, се използва два знака "=". Повече за тези оператори, по-надолу.
   print "Днес е понеделник!\n";
}
#Изписва: Днес е понеделник

А едноредовият вариант е:

$today = "Пон";
print "Днес е понеделник!\n" if ($today == "Пон"); #Забележете, че проверката е след кода, за разлика от езици като C, където е обратното

Съществуват и начини да се направи по-мощна if. Това става с конструкциите else и elsif (Обърнете внимание как се изписва - без "е"). Else служи, за да изпълни някакви инструкции, ако условието на if е грешно. Например горният пример може да се промени така:

$today = "Сря";
if ($today == "Пон") { #Забележете, че когато извършваме проверка, се използва два знака "=". Повече за тези оператори, по-надолу.
   print "Днес е понеделник!\n";
} else {
   print "Днес не е понеделник!\n";
}
#Изписва: Днес не е понеделник

Elsif пък служи да направи допълнителни проверки, ако твърдението на if е грешно и ако те всички са грешни се изпълнява else:

$today = "Сря";
if ($today == "Пон") { #Забележете, че когато извършваме проверка, се използва два знака "=". Повече за тези оператори, по-надолу.
   print "Днес е понеделник!\n";
} elsif ($today == "Вто") {
   print "Днес е вторник!\n";
} elsif ($today == "Сря") {
   print "Днес е сряда!\n";
} elsif ($today == "Чет") {
   print "Днес е четвъртък!\n";
} elsif ($today == "Пет") {
   print "Днес е петък!\n";
} else {
   print "Днес е почивен ден!\n";
}
#Изписва: Днес е сряда

[редактиране] Unless

Конструкцията Unless е обратната на If. Тя изпълнява кода, само ако твърдението е грешно:

$today="Пон";
print "Днес е делник!" unless($today == "Съб" || $today == "Нед");
#Отпечатва: Днес е делник!

Else може да се приложи и при Unless, конструкция elsunless обаче не съществува.

[редактиране] While

While е циклична конструкция. Кодът се изпълнява отново и отново, докато твърдението не стане грешно.

#Тази програма брои от 1 до 10
$countto=10;
$countedto=0;
 
while($countedto <= $counto) {
   $countedto = $countedto + 1; #Същото може да се запише и като $countedto++
   print "$countedto ";
}

Има и други начини да се прекъсне цикъл или итерация (изпълнение). Точно това правят:

  • break - Прекъсва изпълнението на цикъла
  • next - Преминава на следващата итерация
#Тази програма брои от 1 до 10
$countto=10;
$countedto=0;
 
while($countedto <= $counto) {
   $countedto = $countedto + 1; #Същото може да се запише и като $countedto++
   if ($countedto == 3) {
      next;
   } else {
      print "$countedto ";
   }
   if ($countedto == 5) {
      break;
   }
}

Тази програма трябва да брои от 1 до 10 според условието в while, но не става точно така - Числото 3 не се изписва, защото при всяка итерация се прави проверка дали $countedto не е 3. Ако е се пропуска. Също така цикъла няма да стигне никога до 10, защото когато стигне 5, ще се изпълни break и цикъла ще прекъсне.

[редактиране] Инсталация

Пърл е част от всяка Юникс или Юникс-подобна система. Това може да бъде проверено с изпълнението на командата perl -V в шела. За Уиндоус програмната среда може да бъде безплатно свалена от сайта на ActiveState. Всяка стандартна инсталация на програмната среда може да бъде допълвана с най-различни модули от сайта на CPAN

[редактиране] Документация

Документацията на Пърл изобилства от шеги и игри на думи, за разлика от сухия език на повечето компютърна литература, а годишните обръщения на Лари („State of the Onion“, каламбур с обръщението на президента на САЩ, „State of the Union“) са ненадминати образци на духовитост.

Въпреки шеговитият си характер, документацията на езика е изключително пълна и най-важното общодостъпна. С командата perldoc <име на модул> се извежда помощта за съответния модул. Онлайн документацията изобилства с примери и указания дори и за начинаещи в езика.

[редактиране] Литература

Най-популярната книга за Пърл е написана от автора му и е известна сред феновете на езика като „камилата“ заради картинката на обложката си.

  • Уол, Лари; Том Кристиансен, Йон Орвант (2002). „Програмиране с Perl“. ЗеСТ Прес. ISBN 978-954-90498-8-6.
  • Бланк-Еделман, Дейвид (2002). „Perl за системно администриране“. ЗеСТ Прес. ISBN 978-954-91165-3-3.
  • Кристиансен, Том; Нейтън Торкингтън (2005). „Perl Cookbook“. ЗеСТ Прес. ISBN 978-954-93410-6-5.
  • Казънс, Саймън; Питър Уейнрайт (2001). „Програмиране с Perl“. Софтпрес. ISBN 978-954-685-138-3.

[редактиране] Външни препратки


system wymiany linków SEO Tools wymiana linkami wymiana linkami tanie kredyty gotówkowe kreatyna Plaza 3 star hotel Los Angeles krynica noclegi Sejm Tyk