Пърл (език за програмиране): Разлика между версии
Изтрито е съдържание Добавено е съдържание
м й--->ѝ |
- повторение |
||
Ред 19:
'''Perl''' (произнася се „пърл“) е универсален, [[Интерпретативен език за програмиране|интерпретативен]] [[език за програмиране]], създаден от [[Лари Уол]] през 1987 г. Лари е трябвало да създава отчети за системата, която е поддържал тогава, но не е съществувал подходящ инструмент за целта (програмата [[awk]] не е можела да отваря и затваря файлове въз основа на информацията в тях), което го подтиква да създаде свой специализиран инструмент, който по-късно разпространява безплатно.
== Име ==
Първоначално името на езика е било '''Pearl''' (произнася се по същия начин – „пърл“). Още преди да излезе първата версия на езика, Лари установява, че съществува език за програмиране на име [[PEARL]]. С цел да се избегнат конфликти, а и повлиян от характерната за [[философията на Unix]] тенденция към кратки имена, Лари променя името на езика на ''Perl'', без да променя произношението му.
Line 28 ⟶ 26:
Съществува също така тънка разлика в значението в зависимост от това дали името е изписано с главна буква в началото или изцяло с малки букви. ''Perl'' е името на езика за програмиране, което, както (почти) всяко друго име, се пише с главна буква. Под ''perl'' се има предвид интерпретатора на езика Perl, т.е. програмата, която се стартира, за да се изпълни даден код на Perl. Името на интерпретатора спазва неписаното правило имената на команди под [[Юникс]] да са изцяло с малки букви.
== Основни характеристики на Perl ==
В Perl са заимствани концепции от доста езици – [[C (език за програмиране)|C]], [[awk]], [[sed]], [[Lisp]] и др. Най-силните му черти са регулярните изрази ([[английски език|англ]]. ''regular expression'', често съкращавано на ''regex''), вградените сложни [[структури от данни]] (обикновени и асоциативни масиви) и един от най-големите в света набори от свободно достъпни модули [http://cpan.org/ CPAN]. На Perl може да се пише [[процедурно програмиране|процедурно]], [[обектно-ориентирано програмиране|обектно-ориентирано]] и [[функционално програмиране|функционално]] (поддържа [[Затваряне (информатика)|затваряния]], познати още като обвивки, една от най-мощните абстракции в компютърната наука). Perl е [[слабо типизиран език]]. Той е интерпретиран, като програмата първо се компилира до машиннонезависими инструкции ([[байткод]]), които се изпълняват от интерпретатора. За разлика от [[Java]] обаче байткодът не е лесно достъпен, благодарение на което са избегнати редица проблеми с обратната съвместимост. Интерпретаторът на Perl е написан на C и е преносим на огромен брой платформи и [[операционна система|операционни системи]]. Програмата [http://www.indigostar.com/perl2exe.htm perl2exe ] и модулът [http://search.cpan.org/~autrijus/PAR-0.85_01/script/pp pp] могат да бъдат използвани за произвеждане (генериране) на изпълними програми от скриптове на Perl.
== Предимства на езика ==
=== Общността CPAN ===
CPAN (англ. ''Comprehensive Perl Archive Network'', в превод ''Изчерпателна мрежа от архиви на Perl'') представлява огромна колекция от софтуер написан изцяло или отчасти на Perl. Основната градивна единица на този софтуер е модулът. Съществуват незадължителни, но препоръчителни (и често спазвани на практика) указания за писането на модули за Perl, с необходимата им документация, която често с простотата и стандартността си превъзхожда документацията на много комерсиални продукти.
Разработчиците на Perl създават програмни модули, разрешаващи разнообразни проблеми за почти всички [[операционна система|операционни системи]] и дори програмни езици. Тези модули обикновено са достъпни за използване под същия лиценз, както и самия Perl (т.
=== Обработка на текст ===
Line 50 ⟶ 44:
=== Използване на командния интерпретатор ===
Името на
Този изпълним файл може да се използва за бързи изпълнения от командния ред на кратки програми наречени ''one-liners'',
Изпълнение на Perl програма съхранена във файл с име '''my_program.pl'''
Line 57 ⟶ 51:
или само '''./my_program.pl''', ако файлът е изпълним ('''chmod +x my_program.pl''') и започва с директивата '''#!/usr/bin/perl''', или подобна, т.е оказваща пътя до perl (само под '''*nix''').
едноредови изрази (от англ. one-liners):
# Стартира дебъгера на Perl за „празната програма“, който може да бъде използван като shell / REPL (read-evaluate-print loop)
perl -de0
Line 81 ⟶ 74:
== Недостатъци на езика ==
Противниците на Perl твърдят, че той има много неясен и дори откровено грозен [[синтаксис]], дължащ се на редицата синтактични съкращения, целящи пестене на време при писане на едноредови команди (one-liners), и вградените оператори за работа с [[Регулярен израз|регулярни изрази]], които значително улесняват работата със символни низове, за сметка на загадъчният си запис. Мотото на езика „Има повече от един начин да го направиш“ („There Is More Than One Way To Do It.“, съкратено TIMTOWTDI), е друг аргумент на противниците на Perl, както и слабата типизация (която всъщност е една от силните страни на Perl).
Използването на основен набор от правила и конвенции при писането на код, като например тези използвани в документацията на Perl, лесно неутрализират всички синтактични особености.
== Здравей, свят! ==
Програмата извеждаща „Здравей, свят!“, реализирана на Perl:
<source lang="perl">
print
</source>
== Вградени типове данни ==
Вградените типове данни на Perl се обозначават с помощта на сиджил (символ, използван като представка, т.е. преди името на променливата), който също така представлява и минималистична [[унгарска нотация]]:
* '''Скалар''' – използва сиджил <nowiki>'</nowiki>''', представлява единична стойност, която може да бъде число, символен низ или препратка (или още референция от англ. ''reference'')
* '''Масив''' – използва сиджил <nowiki>'</nowiki>'''@'''<nowiki>'</nowiki>, представлява списък от скалари, означавани (т.е. номерирани) последователно, като масивите в Perl са 0-базирани, но това може да бъде променяно, но е силно непрепоръчително. Поредният номер на даден елемент от масива се нарича ''индекс''. Достъпът до отделни елементи от масива използва подобен на езика [[C (език за програмиране)|C]] синтаксис: '''$<'''име_на_масив'''>[<'''индекс>''']'''.
Line 108 ⟶ 97:
* '''Typeglob''' – използва сиджил <nowiki>'</nowiki>'''*'''<nowiki>'</nowiki> и представлява тип данни, който предоставя достъп до символните таблици в езика Perl.
Кратки примери:
Line 114 ⟶ 102:
# При декларирането на променливи в езика Perl се използва ключовата дума 'my'
# подобно на ключовата дума 'var', срещаща се в други езици.
# Деклариране на скаларни променливи.
Line 120 ⟶ 107:
my $name = "Янко";
my $number = 9;
print
# извежда: Янко #9
# Деклариране на масив.
#
my @names = (
print
# oтпечатва: Иван, Георги и Петър
# Деклариране на хеш.
Line 141 ⟶ 126:
);
print
# извежда:
Line 147 ⟶ 132:
# Фамилия: Георгиев
# Местожителство: София
# Отваряне на файл за четене.
Line 154 ⟶ 138:
my @line = <$file>; # Всеки ред на файла се записва като отделен елемент на масива.
close $file;
# Деклариране на функция / подпрограма.
Line 167 ⟶ 150:
# Скобите са незадължителни при извикването на функции, стига
# нейната дефиниция да е преди употребата ѝ, но неизползването на скобите
#
#
count_to 4;
Line 178 ⟶ 161:
# Отпечатва абсолютно същото, но е препоръчително
#
#
&count_to(4);
# Съхранява референция към функция в скалар.
my $count_to_ref = \&count_to;
# Извикването на тази референция става, като първо
&$count_to_ref(10);
$count_to_ref->(10);
# Когато се използват затваряния (closure), се използват тъкмо референции към
#
my $pow_generator = sub {
Line 202 ⟶ 184:
my $pow3 = $pow_generator->(3);
print $pow3->(2),
</source>
== Основни контролни структури ==
Контролните структури в Perl могат да се записват по два начина. При първият кодът, който ще се изпълнява, е разположен на произволен брой редове, при другия – само на един.
За разлика от езика [[C (език за програмиране)|C]], в Perl е задължителна употребата на фигурни скоби за структурите използващи един единствен оператор.
=== Условни структури ===
==== if ====
<source lang='perl'>
my $today = "понеделник";
if ($today eq
print "Днес е понеделник!\n";
}
Line 229 ⟶ 208:
<source lang='perl'>
my $today = "понеделник";
print
</source>
Line 235 ⟶ 214:
<source lang='perl'>
my $today = "сряда";
if ($today eq
print "Днес е понеделник!\n";
} elsif ($today eq
print "Днес е вторник!\n";
} elsif ($today eq
print "Днес е сряда!\n";
} elsif ($today eq
print "Днес е четвъртък!\n";
} elsif ($today eq
print "Днес е петък!\n";
} else {
Line 253 ⟶ 232:
==== unless ====
'''unless''' е обратната на '''if'''
<source lang='perl'>
my $today = "понеделник";
print
# извежда: Днес е делник!
</source>
=== Циклични структури ===
Line 265 ⟶ 243:
==== while ====
При '''while''' кодът се изпълнява, докато условието не се провали.
<source lang='perl'>
my $i = 0;
while ($i <= 9) {
�35�
�36�
}
</source>
Line 279 ⟶ 257:
for (my $i = 0; $i <= 9; $i++)
{
�37�
}
</source>
Line 288 ⟶ 266:
foreach my $i (0 .. 9) # бинарният оператор '..' връща масив с елементите от интервалa [$a, $b], записан като $a .. $b
{
}
</source>
За прекъсване на цикъл или итерация (изпълнение) се използват:
Line 301 ⟶ 278:
while ($counted_to <= $count_to) {
�39�
�40�
�41�
�42�
}
</source>
Тази програма трябва да брои от 1 до 10 според условието в '''while''', но числото 3 не се извежда, защото при всяка итерация се прави проверка дали '''$counted_to''' не е 3, ако е
Цикличните структури в Perl превъзхождат тези в езика C, тъй като те могат да бъдат „именувани“ с етикети и позволяват излизане от дълбоко вмъкнати един в друг цикли:
<source lang='perl'>
my $i = 0;
Line 316 ⟶ 292:
while ($i < 10)
{
�43�
�44�
�45�
�46�
�47�
�48�
�49�
�50�
�51�
�52�
�53�
�54�
�55�
�56�
}
</source>
== Поeзия в Perl ==
На Perl можe даже да се пишат стихотворения. Едно такова стихотворение с название „Black Perl“ („Черен бисер/перла/“) е било цитирано от Лари Уол в първоаприлско писмо в [[Usenet]]. То било написано поначало на Perl 3 и по думите на самия Лари той изпитал морално удовлетворение, когато стихотворението не извадило грешки в синтактически анализатор на Perl 5. Лари е известен и с миролюбивостта си, и протеста срещу милитаристичната политика на големите държави.
<source lang="perl">
$i = $i + 1; # може да се запише съкратено $i++;
print "$i\n";
print "$i\n";
$counted_to++;
next if $counted_to == 3;
print "$counted_to ";
last if $counted_to == 5;
print "\$i = $i\n";
MIDDLE:
Line 327 ⟶ 332:
next MIDDLE if $i == 6;
}
last OUTER if $j == 2;
}
</source>
== Инсталация ==
Perl е част от всяка Юникс или [[Юникс-подобна операционна система|Юникс-подобна]] система. Това може да бъде проверено с изпълнението на командата perl -v в шела. За Уиндоус програмната среда може да бъде безплатно свалена от [http://www.activestate.com/Products/activeperl/index.plex сайта на ActiveState] или [http://strawberryperl.com/ сайта на Strawberry Perl]
== Документация ==
Документацията на Perl изобилства от шеги и игри на думи, за разлика от сухия език на повечето компютърна литература, а годишните обръщения на Лари („State of the Onion“, каламбур с обръщението на президента на САЩ, „State of the Union“) са ненадминати образци на духовитост.
Въпреки
== Литература ==
Най-популярната книга за Perl е написана от автора му и е известна сред феновете на езика като „камилата“ заради картинката на обложката си.
* {{cite book |last= Уол |first= Лари |authorlink= |coauthors= Том Кристиансен, Йон Орвант |title= Програмиране с Perl |year= 2002 |publisher= ЗеСТ Прес |location= |isbn= 978-954-90498-8-6 }}
Line 380 ⟶ 350:
* {{cite book |last= Кристиансен |first= Том |authorlink= |coauthors= Нейтън Торкингтън |title= Perl Cookbook |year= 2005 |publisher= ЗеСТ Прес |location= |isbn= 978-954-93410-6-5 }}
* {{cite book |last= Казънс |first= Саймън |authorlink= |coauthors= Питър Уейнрайт |title= Програмиране с Perl |year= 2001 |publisher= Софтпрес |location= |isbn= 978-954-685-138-3 }}
== Външни препратки ==
* [http://2009.perlbulgaria.org/ Perl-воркшоп 2009]
* [http://www.perl.com/ Официална страница на Perl]
* [http://www.cpan.org/ CPAN] (Comprehensive Perl Archive Network, огромен архив с модули за Perl)
|