Пърл (език за програмиране): Разлика между версии

Изтрито е съдържание Добавено е съдържание
м Bot: Automated text replacement (- ) +))
м замяна с n-тире
Ред 23:
== Име ==
 
Първоначално името на езика е било '''Pearl''' (произнася се по същия начин „пърл“). Още преди да излезе първата версия на езика, Лари установява, че съществува език за програмиране на име [[PEARL]]. С цел да се избегнат конфликти, а и повлиян от характерната за [[философията на Unix]] тенденция към кратки имена, Лари променя името на езика на ''Perl'', без да променя произношението му.
 
Впоследствие се появяват интерпретации на името като съкращение, най-популярната от които е ''Practical Extraction and Report Language'' (в превод: ''практичен език за извличане и отчети''). Съществуват и много други интерпретации, включително и такива от самия Лари Уол, като например шеговитото ''Pathologically Eclectic Rubbish Lister'' (в превод: ''патологично многостранен изброител на глупости''). Всички те обаче са [[бекроним]]и. Името на езика не е съкращение от нищо, поради което се пише само с една главна буква ''Perl'', а не ''PERL'' (за разлика от споменатия език ''PEARL'', чието име наистина е съкращение).
 
Съществува също така тънка разлика в значението в зависимост от това дали името е изписано с главна буква в началото или изцяло с малки букви. ''Perl'' е името на езика за програмиране, което, както (почти) всяко друго име, се пише с главна буква. Под ''perl'' се има предвид интерпретатора на езика Perl, т.е. програмата, която се стартира, за да се изпълни даден код на Perl. Името на интерпретатора спазва неписаното правило имената на команди под [[Юникс]] да са изцяло с малки букви.
Ред 32:
== Основни характеристики на Perl ==
 
В Perl са заимствани концепции от доста езици [[C (език за програмиране)|C]], [[awk]], [[sed]], [[Lisp]] и др. Най-силните му черти са регулярните изрази ([[английски език|англ]]. ''regular expression'', често съкращавано на ''regex''), вградените сложни [[структури от данни]] (обикновени и асоциативни масиви) и един от най-големите в света набори от свободно достъпни модули [http://cpan.org/ CPAN]. На Perl може да се пише [[процедурно програмиране|процедурно]], [[обектно-ориентирано програмиране|обектно-ориентирано]] и [[функционално програмиране|функционално]] (поддържа [[Затваряне (информатика)|затваряния]], познати още като обвивки, една от най-мощните абстракции в компютърната наука). Perl е [[слабо типизиран език]]. Той е интерпретиран, като програмата първо се компилира до машиннонезависими инструкции ([[байткод]]), които се изпълняват от интерпретатора. За разлика от [[Java]] обаче, байткодът не е лесно достъпен, благодарение на което са избегнати редица проблеми с обратната съвместимост. Интерпретаторът на Perl e написан на C и е преносим на огромен брой платформи и [[операционна система|операционни системи]]. Програмата [http://www.indigostar.com/perl2exe.htm perl2exe ] и модулът [http://search.cpan.org/~autrijus/PAR-0.85_01/script/pp pp] могат да бъдат използвани за произвеждане (генериране) на изпълними програми от скриптове на Perl.
 
 
Ред 45:
 
=== Динамични уеб страници ===
Разработчиците на динамични уеб страници (страниците, чиито съдържание се произвежда на момента на тяхното извикване т.е. динамично) често използват Perl поради големия брой безплатни скриптове, както и общността на разработчици предлагащи помощ на своите колеги. Богатата библиотека с модули, споменатата мощна текстообработка, която често се налага при генерирането на [[HTML]] страници, както и фактът, че е слабо типизиран и интерпретиран език, правят възможна бързата разработка на приложения в много области, включително и настолни графични приложения.
 
Фактът, че Perl се интерпретира в момента на изпълнение, налага [[уеб сървър]]ът да стартира на интерпретатора ''perl'' за всяка [[уеб страница]], която трябва да се генерира. При по-натоварени сайтове това може да доведе до значително натоварване на системата, както откъм памет, така и откъм процесорно време. За да се избегне това, специално за Perl е създаден модула ''mod_perl'' за сървъра [[Apache]], който на практика представлява интерпретатор за Perl, вграден в кода на Apache. Това позволява на уеб сървъра да изпълнява код на Perl, без да се налага да стартира нов [[процес (операционна система)|процес]] за всяка заявена уеб страница. Това води до значително увеличение на производителността при намалени ресурси. Mod_perl отива дори още по-надалеч и дава на скриптовете на Perl достъп до всички „вътрешности“ на самия Apache сървър, като им позволява да се намесват във всеки един етап от доставянето на [[HTML]] страницата, както и да използват конструкции на Perl в конфигурационните файлове на Apache.
 
=== Използване на командния интерпретатор ===
Името на главният [[изпълним файл]] (т.е. [[интерпретатор]]а на езика, който превръща текстовия код на Perl в изпълними инструкции за [[процесор]]а) е същото като името на програмния език, но обикновено се пише с малка буква perl в *nix системи или perl.exe в Уиндоус системи.
Този изпълним файл може да се използва за бързи изпълнения от командния ред на кратки програми наречени one-liners, който биха отнели много редове (и вероятно време) ако биха били написани на други програмни езици.
 
Ред 97:
 
Вградените типове данни на Perl се обозначават с помощта на сиджил (символ използван като представка, т.е преди името на променливата), който също така представлява и минималистична [[унгарска нотация]]:
* '''Скалар''' - използва сиджил <nowiki>'</nowiki>'''$'''<nowiki>'</nowiki>, представлява единична стойност, която може да бъде число, символен низ или препратка (или още референция от англ. ''reference'')
 
* '''Масив''' - използва сиджил <nowiki>'</nowiki>'''@'''<nowiki>'</nowiki>, представлява списък от скалари, означавани (т.е. номерирани) последователно, като масивите в Perl са 0-базирани, но това може да бъде променяно, но е силно непрепоръчително. Поредният номер на даден елемент от масива се нарича ''индекс''. Достъпът до отделни елементи от масива използва подобен на езика [[C (език за програмиране)|C]] синтаксис: '''$<'''име_на_масив'''>[<'''индекс>''']'''.
 
* '''Хеш''' - използва сиджил <nowiki>'</nowiki>'''%'''<nowiki>'</nowiki>, (наричан още хеш-таблица или асоциативен масив) е ''множество'' от подредени двойки скалари. Като двойките помежду си нямат подредба или номерация, т.е. образуват математическо множество. Елементите на една конкретна двойка обаче са подредени, т.е. има първи и втори: Първият се нарича ключ (на англ. ''key''), а вторият стойност (на англ. ''value''). И двата скалара могат да бъдат произволни и няма нужда да са от един и същи тип. Достъпът до отделни стойности от хеша става чрез ключовете. В известен смисъл ключовете при хеша съответстват на индексите при масива. В това отношение хешът може да се разглежда като по-обща форма на масив, при която индексите не са ограничени до числа, а могат да бъдат произволни скалари. Тъй като ключовете се използват за идентификация на стойностите в хеша, те трябва да са уникални, т.е. да няма повторения. За разлика от тях, стойностите могат да се повтарят на различни ключове могат да съответстват едни и същи стойности. Достъпът до стойностите на хеша използва синтаксиса: '''$<'''име_на_хеш'''>{'''име_на_ключ'''}'''.
 
* '''Файлов манипулатор''' - няма определен сиджил, наричан още файлов дескриптор (от англ. ''file descriptor'' или '' file handle''), този тип променливи предоставя достъп до файл или друго поточно устройство, като например мрежова връзка, тръба (от англ. ''pipe''), и т.н. Файловият дескриптор може да бъде отворен за писане, четене или и за двете.
 
* '''Подпрограма''' - използва сиджил <nowiki>'</nowiki>'''&'''<nowiki>'</nowiki>. Подпрограмата (subroutine, позната още и като функция (на анлг. ''function'') е последователност от инструкции, на които могат да се предават аргументи, извършващи някакво действие с тях, и/или пресмята резултат и накрая евентуално връща стойност (обикновено пресметнатия резултат или нищо, ако няма такъв).
 
* '''Typeglob''' - използва сиджил <nowiki>'</nowiki>'''*'''<nowiki>'</nowiki> и представлява тип данни, който предоставя достъп до символните таблици в езика Perl.
 
 
Ред 208:
== Основни контролни структури ==
 
Контролните структури в Perl могат да се записват по два начина. При първият кодът, който ще се изпълнява, е разположен на произволен брой редове, при другия - само на един.
За разлика от езика [[C (език за програмиране)|C]], в Perl е задължителна употребата на фигурни скоби за структурите използващи един единствен оператор.
 
Ред 294:
 
За прекъсване на цикъл или итерация (изпълнение) се използват:
* '''last''' - прекъсва изпълнението на цикъла
* '''next''' - преминава на следващата итерация
<source lang='perl'>
my $count_to = 10;