Това е превод на български от Теодора Берова на първият урок от поредицата уроци, които водих преди време за QA-отдела на голяма международна компания, по покана на Светлин Наков.
Искам да го споделя с всеки, който търси непреходни знания за Perl.
Обновяванията след 1ви юни 2014 и преводът са направени с подкрепата на Chain Solutions (http://chainsolutions.net/).
Таблица със съдържанието на курса може да бъде намерена на http://i-can.eu/ .
Изходният код на примерите и уроците в ODP формат се намират на адрес https://github.com/kberov/PerlProgrammingCourse/ .
1. Курс по
програмиране на Perl
Въведение в PerlВъведение в Perl
Автор: Красимир Беров, Превод: Теодора Берова
I-can.eu С любезното съдействие на Chain Solutions
2. Съдържание
1. Кратка история
2. Основни понятия. Интерпретиран (скриптов) или
компилиран?
3. Виртуална машина и платформена независимост
4. Защо Perl?
5. CPAN и PPM
6. Инсталиране под (Windows/Unix)
7. Основен синтаксис
8. Вградени оператори и функции
9. Hello World (Здравей Свят)
10.Източници
3. Кратка история
● 1986/7 – Perl е изобретен от Лари Уол в Лабораторията
по реактивни двигатели в NASA.
● 1987-Dec-18 Perl 1 представя Perl пред света.
● 1988-Jun-05 Perl 2 въвежда пакета с регулярни изрази
на Хенри Спенсър.
● 1989-Oct-18 Perl 3 вече обработва двоични данни.
● 1991-Mar-21 Perl 4 представя първата си книга – Camel
book.
● 1994-Oct-17 Perl 5 въвежда всичко останало (ООП,
нишки...), включително и възможността да се въвежда
всичко останало.
● 2014-05-27 Издание на Perl 5.20 от Ricardo Signes.
4. Основни понятия
● P.E.R.L (Pathologically Eclectick Rubish Lister –
патологично-еклектично средство за извеждане
на безсмислици)
или
P.E.R.L (Practical Extraction and Report Language
– практичен език за извличане и отчети)
● Езици за програмиране
● Интерпретирани и компилирани езици
5. Основни понятия
● Езици за програмиране
● C/C++
● Java
● Tcl
● Perl
● PHP
● Ruby
● JavaScript
7. Основни понятия
● Интерпретиран?
– Един интерпретиран език се нуждае от програма,
наречена интерпретатор, която да обработва
изходния код всеки път, когато стартирате програмата.
– Интерпретаторът превръща изходния код в машинен
код, за да го разчете машината.
– Изходният код е за хора.
● Повече информация:
– perlhack/Принципи на работата на интерпретатора
– perlguts/Компилираният код
● Интерпретирани езици: Perl, PHP, Python, Ruby...
8. Основни понятия
● Компилиран?
– Компилираният език използва компилатор, който
обработва кода еднократно.
– След това, вие можете да пускате получения
машинен код много пъти на много машини, без да е
нужно да се компилира отново.
● Компилирани езици: C,C++, D, Delphy,..
● Байтово компилирани езици: Java, Python, Perl
(Parrot-Perl6) :)...
● Байтовият код също е независим от машината
– толкова е преносим, колкото и самия изходен код
(виж perlcompile, B::Bytecode).
9. Виртуална машина
● Виртуална машина == perl като
програма/интерпретатор
● Работата на интерпретатора се дели на два
основни етапа:
– компилиране на кода до състояние удобно за
вътрешна употреба от интерпретатора
(байткод)
– изпълнение на кода.
● Виртуалната машина на Perl 6 – Parrot, е по-
скоро като Java и .NET
10. Виртуална машина
● Кратък преглед на етапите на работа на perl
– Компилиране
● Стартиране
● Обработка на изходния/програмния код
(синтактичен анализ)
● Компилация и оптимизация
– Изпълнение
● Изпълняване/Работа
● Обработка на изключения
11. Платформена независимост
● Виртуалната машина на Perl ни освобождава от
необходимостта да се съобразяваме с
особеностите на Операционната Система (ОС)
● Високо ниво на независимост
● Един и същ изходен код върви под различни
платформи:
use File::Path;use File::Path;
my $dest ='/some/path/in/main/drive'my $dest ='/some/path/in/main/drive'
eval { mkpath($dest) };eval { mkpath($dest) };
if ($@) {if ($@) {
print "Couldn't create $dest:$/$@$/"print "Couldn't create $dest:$/$@$/"
. "... exiting.$/";. "... exiting.$/";
exit;exit;
}}
12. Защо Perl?
● Лесен за изучаване
– Научаването на малко Perl може да ви заведе
по-далече, отколкото предполагате.
– По-лесен е за хората да го пишат, отколкото за
компютрите да го разбират.
– Синтаксисът на езика много повече наподобява
човешки език.
open(FILE) or die $!;open(FILE) or die $!;
die $! unless open(FILE);die $! unless open(FILE);
die $! if not open(FILE);die $! if not open(FILE);
13. Защо Perl?
● Преносим
– Perl е пренесен на почти всички съвременни
операционни системи, като Windows, Mac OS X,
Linux, Unix (където е създаден) и мнго други...
● Език от много високо ниво
– Не ви кара да мислите за неясни неща, като
разпределяне на паметта, процесор (CPU) и др.
14. Защо Perl?
● „Говори“ текста (във всякакво кодиране).
● „Мисли“ за файловете от гледна точка на редове и
изречения (по подразбиране) или както сте му
казали да го прави.
● Има вградени мощни регулярни изрази.
if( $lines[$_] =~ /^--s*?[(w+)]/ ){if( $lines[$_] =~ /^--s*?[(w+)]/ ){
$key = $1;$key = $1;
}}
ВНИМАНИЕ!!!
Не пишете мърляв код, само защото ви е по-лесно. В повечето
случаи вашият код ще живее по-дълго, отколкото очаквате, и се
получава грозно!!!
15. Защо Perl?
● И накрая,
– Защото така искате
– Защото вашият шеф иска така :)...
16. CPAN и PPM
● CPAN (Comprehensive Perl Archive Network) е най-
големият източник на многократно използваем и
стандартизиран perl-код.
Използвайте програмата cpan, за да инсталирате,
компилирате и обновявате модули, ако имате C
компилатор.
● PPM (Perl Package Manager) е инструмент на ActiveState
за инсталиране на прекомпилирани perl-модули.
Това улеснява работата по намирането, инсталирането,
обновяването и премахването на Perl пакети под
Windows. Използвайте програмата ppm, която върви с
ActivePerl.
17. Инсталиране (Windows/Unix)
– Linux/Unix
● Няма нужда – вече го имате инсталиран.
● Използвайте perlbrew за да инсталирате ваш собствен
Perl.
● Използвайте ваш собствен ActivePerl.
– Windows
● Свалете си perl за вашата архитектура от:
http://strawberryperl.com/
или от:
http://www.activestate.com/activeperl/downloads
● Щракнете двукратно върху
strawberry-perl-5.XX.X.X-XXbit.msi
или
ActivePerl-5.XX.X.XXXX-....msi
1.Next, next, mm.. next, yes, next.... :D
18. Основи на синтаксиса
● Един Perl скрипт или програма се състои от
една или повече конструкции.
● Тези конструкции са записани в скрипта по
разбираем и прост начин.
● Не е необходимо да съдържат функцията
main() или нещо от тоя род.
19. Основи на синтаксиса
● Конструкциите в Perl завършват с точка и
запетая (;)
#this is a fully functional program#this is a fully functional program
print "Hello, world";print "Hello, world";
20. Основи на синтаксиса
● Коментарите започват със символа диез (#) и
важат до края на реда.
#this is a fully functional program with comment#this is a fully functional program with comment
print "Hello, world";print "Hello, world";
21. Основи на синтаксиса
● Паузите са без значение...
printprint
"Hello, world""Hello, world"
;;
22. Основи на синтаксиса
● ...освен когато са вътре в низ с кавички (“...”)
# this would print with a line-break in the middle# this would print with a line-break in the middle
print "Helloprint "Hello
world";world";
23. Основи на синтаксиса
● Двойни или единични кавички могат да се
използват около литерални (буквални) низове.
print "Hello, world";print "Hello, world";
print 'Hello, world';print 'Hello, world';
24. Основи на синтаксиса
● Забележка: Променливи и специални знаци -
като знака за нов ред (n), могат да се
обграждат само с двойни кавички
print "Hello, $namen"; # works fineprint "Hello, $namen"; # works fine
print 'Hello, $namen'; # prints $namen literallyprint 'Hello, $namen'; # prints $namen literally
26. Основи на синтаксиса
● Можете да използвате скоби за аргументите
на функциите, или пък да пропуснете – това е
въпрос на личен стил.
● Изискват се само когато може да възникнат
проблеми с приоритетите (кой израз се
изпълнява по-напред).
print("Hello, worldn");print("Hello, worldn");
print "Hello, worldn";print "Hello, worldn";
27. Вградени оператори и функции
● Perl върви с богат избор от вградени
функции.
● Пълен списък с функциите на:
http://perldoc.perl.org/perlfunc.html
● Можете да прочетете за всяка отделна
функция и като въведете на командния ред
следното: perldoc -f functionname.
● Пълната документация на операторите:
http://perldoc.perl.org/perlop.html
● Ето някои от най-използваните.
28. Вградени оператори и функции
● Математически оператори
+ събиране
- изваждане
* умножение
/ деление
29. Вградени оператори и функции
● Сравнение на числа (Numeric comparison)
== равенство
!= неравенство
< по-малко
> по-голямо
<= по-малко или равно
>= по-голямо или равно
30. Вградени оператори и функции
● Сравнение на низове (String comparison)
eq равенство
ne неравенство
lt по-малко
gt по-голямо
le по-малко или равно
ge по-голямо или равно
● Защо има отделни сравнения за числа и за низове?
– Perl няма специални типове променливи.
– perl трябва да знае как ще сортира – по числов или по
азбучен ред (по-точно – според кодовата таблица).
31. Вградени оператори и функции
● Булева логика
&& and (и)
|| or (или)
! not (не)
● and, or и not не са просто описания на операторите
Те са:
– операторите сами по себе си
– по-читаеми и ясни от операторите в C-стил
– с по-нисък приоритет от && и „приятели“
● Виж perlop
32. Вградени оператори и функции
● Някои други оператори:
= присвояване
. конкатенация (съединяване на няколко
низа в един)
x оператор за повторение (умножение) на
низ
.. оператор за поредици (създава списък от
числа)
33. Вградени оператори и функции
● Много оператори могат да се комбинират със
знака =
$a += 1; # same as $a = $a + 1$a += 1; # same as $a = $a + 1
$a -= 1; # same as $a = $a - 1$a -= 1; # same as $a = $a - 1
$a .= "n"; # same as $a = $a . "n";$a .= "n"; # same as $a = $a . "n";
34. Hello World
#!/usr/bin/perl#!/usr/bin/perl
use warnings;use warnings;
use strict;use strict;
use utf8;use utf8;
print 'Hi'.$/;print 'Hi'.$/;
Т.нар. Shebang-ред.
Незадължителен под
Windows
Прагма за контролиране на
незадължителни предупреждения
Прагма за ограничаване на опасни
конструкции
Прагма за включване/изключване
поддръжката на на UTF-8 в изходния
код (Обичате уникод, нали така?).
Отпечатва низ или списък от
низове на екрана.
Буквален низ (скаларна
стойност).
Разделителят за входен запис – нов ред
по подразбиране. Променя идеята на Perl
за това какво е ред.
Вижте това знание приложено в практиката: http://git.io/1JIGsA
35. Източници
● Perl CORE documentation
– perlhist, perlintro, perldata, perlhack, perlguts,
perlvar, perlcompile, etc.
● „Beginning Perl“ by Simon Cosens with Peter
Wainwright (Wrox Press Ltd. 2000)
http://www.perl.org/books/beginning-perl/
● Modern Perl by chromatic
http://www.onyxneon.com/books/modern_perl/
● See also: books.perl.org