Въведение в perl
DESCRIPTION
Това е превод на български от Теодора Берова на първият урок от поредицата уроци, които водих преди време за QA-отдела на голяма международна компания, по покана на Светлин Наков. Искам да го споделя с всеки, който търси непреходни знания за Perl. Обновяванията след 1ви юни 2014 и преводът са направени с подкрепата на Chain Solutions (http://chainsolutions.net/). Таблица със съдържанието на курса може да бъде намерена на http://i-can.eu/ . Изходният код на примерите и уроците в ODP формат се намират на адрес https://github.com/kberov/PerlProgrammingCourse/ .TRANSCRIPT
Курс по програмиране на Perl
Въведение в PerlВъведение в Perl
Автор: Красимир Беров, Превод: Теодора Берова
I-can.eu С любезното съдействие на Chain Solutions
Съдържание
1. Кратка история
2. Основни понятия. Интерпретиран (скриптов) или компилиран?
3. Виртуална машина и платформена независимост
4. Защо Perl?
5. CPAN и PPM
6. Инсталиране под (Windows/Unix)
7. Основен синтаксис
8. Вградени оператори и функции
9. Hello World (Здравей Свят)
10.Източници
Кратка история
● 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.
Основни понятия
● P.E.R.L (Pathologically Eclectick Rubish Lister – патологично-еклектично средство за извеждане на безсмислици)или P.E.R.L (Practical Extraction and Report Language – практичен език за извличане и отчети)
● Езици за програмиране● Интерпретирани и компилирани езици
Основни понятия
● Езици за програмиране● C/C++● Java● Tcl● Perl● PHP● Ruby● JavaScript
Основни понятия
● Интерпретиран или компилиран език е Perl?
Основни понятия
● Интерпретиран?
– Един интерпретиран език се нуждае от програма, наречена интерпретатор, която да обработва изходния код всеки път, когато стартирате програмата.
– Интерпретаторът превръща изходния код в машинен код, за да го разчете машината.
– Изходният код е за хора.
● Повече информация:
– perlhack/Принципи на работата на интерпретатора
– perlguts/Компилираният код● Интерпретирани езици: Perl, PHP, Python, Ruby...
Основни понятия
● Компилиран?
– Компилираният език използва компилатор, който обработва кода еднократно.
– След това, вие можете да пускате получения машинен код много пъти на много машини, без да е нужно да се компилира отново.
● Компилирани езици: C,C++, D, Delphy,..
● Байтово компилирани езици: Java, Python, Perl (Parrot-Perl6) :)...
● Байтовият код също е независим от машината
– толкова е преносим, колкото и самия изходен код
(виж perlcompile, B::Bytecode).
Виртуална машина● Виртуална машина == perl като
програма/интерпретатор● Работата на интерпретатора се дели на два
основни етапа:
– компилиране на кода до състояние удобно за вътрешна употреба от интерпретатора (байткод)
– изпълнение на кода.● Виртуалната машина на Perl 6 – Parrot, е по-
скоро като Java и .NET
Виртуална машина
● Кратък преглед на етапите на работа на perl– Компилиране
● Стартиране● Обработка на изходния/програмния код
(синтактичен анализ)● Компилация и оптимизация
– Изпълнение● Изпълняване/Работа● Обработка на изключения
Платформена независимост● Виртуалната машина на 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;}}
Защо 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);
Защо Perl?
● Преносим– Perl е пренесен на почти всички съвременни
операционни системи, като Windows, Mac OS X, Linux, Unix (където е създаден) и мнго други...
● Език от много високо ниво– Не ви кара да мислите за неясни неща, като
разпределяне на паметта, процесор (CPU) и др.
Защо Perl?
● „Говори“ текста (във всякакво кодиране).
● „Мисли“ за файловете от гледна точка на редове и изречения (по подразбиране) или както сте му казали да го прави.
● Има вградени мощни регулярни изрази.if( $lines[$_] =~ /^--\s*?\[(\w+)\]/ ){if( $lines[$_] =~ /^--\s*?\[(\w+)\]/ ){ $key = $1;$key = $1;}}
ВНИМАНИЕ!!!Не пишете мърляв код, само защото ви е по-лесно. В повечето случаи вашият код ще живее по-дълго, отколкото очаквате, и се получава грозно!!!
Защо Perl?
● И накрая, – Защото така искате
– Защото вашият шеф иска така :)...
CPAN и PPM
● CPAN (Comprehensive Perl Archive Network) е най-големият източник на многократно използваем и стандартизиран perl-код.Използвайте програмата cpan, за да инсталирате, компилирате и обновявате модули, ако имате C компилатор.
● PPM (Perl Package Manager) е инструмент на ActiveState за инсталиране на прекомпилирани perl-модули.Това улеснява работата по намирането, инсталирането, обновяването и премахването на Perl пакети под Windows. Използвайте програмата ppm, която върви с ActivePerl.
Инсталиране (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
Основи на синтаксиса
● Един Perl скрипт или програма се състои от една или повече конструкции.
● Тези конструкции са записани в скрипта по разбираем и прост начин.
● Не е необходимо да съдържат функцията main() или нещо от тоя род.
Основи на синтаксиса
● Конструкциите в Perl завършват с точка и запетая (;)
#this is a fully functional program#this is a fully functional programprint "Hello, world";print "Hello, world";
Основи на синтаксиса
● Коментарите започват със символа диез (#) и важат до края на реда.
#this is a fully functional program with comment#this is a fully functional program with commentprint "Hello, world";print "Hello, world";
Основи на синтаксиса
● Паузите са без значение...
printprint "Hello, world""Hello, world" ;;
Основи на синтаксиса
● ...освен когато са вътре в низ с кавички (“...”)
# this would print with a line-break in the middle# this would print with a line-break in the middleprint "Helloprint "Helloworld";world";
Основи на синтаксиса
● Двойни или единични кавички могат да се използват около литерални (буквални) низове.
print "Hello, world";print "Hello, world";print 'Hello, world';print 'Hello, world';
Основи на синтаксиса
● Забележка: Променливи и специални знаци - като знака за нов ред (\n), могат да се обграждат само с двойни кавички
print "Hello, $name\n"; # works fineprint "Hello, $name\n"; # works fineprint 'Hello, $name\n'; # prints $name\n literallyprint 'Hello, $name\n'; # prints $name\n literally
Основи на синтаксиса
● Числата не се нуждаят от кавички
print 42;print 42;
Основи на синтаксиса
● Можете да използвате скоби за аргументите на функциите, или пък да пропуснете – това е въпрос на личен стил.
● Изискват се само когато може да възникнат проблеми с приоритетите (кой израз се изпълнява по-напред).
print("Hello, world\n");print("Hello, world\n");print "Hello, world\n";print "Hello, world\n";
Вградени оператори и функции● Perl върви с богат избор от вградени
функции. ● Пълен списък с функциите на:
http://perldoc.perl.org/perlfunc.html● Можете да прочетете за всяка отделна
функция и като въведете на командния ред следното: perldoc -f functionname.
● Пълната документация на операторите: http://perldoc.perl.org/perlop.html
● Ето някои от най-използваните.
Вградени оператори и функции● Математически оператори
+ събиране
- изваждане
* умножение
/ деление
Вградени оператори и функции● Сравнение на числа (Numeric comparison)
== равенство
!= неравенство
< по-малко
> по-голямо
<= по-малко или равно
>= по-голямо или равно
Вградени оператори и функции● Сравнение на низове (String comparison)
eq равенство
ne неравенство
lt по-малко
gt по-голямо
le по-малко или равно
ge по-голямо или равно
● Защо има отделни сравнения за числа и за низове?
– Perl няма специални типове променливи.
– perl трябва да знае как ще сортира – по числов или по азбучен ред (по-точно – според кодовата таблица).
Вградени оператори и функции● Булева логика
&& and (и)
|| or (или)
! not (не)● and, or и not не са просто описания на операторите
Те са:
– операторите сами по себе си
– по-читаеми и ясни от операторите в C-стил
– с по-нисък приоритет от && и „приятели“● Виж perlop
Вградени оператори и функции● Някои други оператори:
= присвояване
. конкатенация (съединяване на няколко низа в един)
x оператор за повторение (умножение) на низ
.. оператор за поредици (създава списък от числа)
Вградени оператори и функции● Много оператори могат да се комбинират със
знака =
$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";
Hello World
#!/usr/bin/perl#!/usr/bin/perluse warnings;use warnings;use strict;use strict;use utf8;use utf8;print 'Hi'.$/;print 'Hi'.$/;
Т.нар. Shebang-ред. Незадължителен под Windows
Прагма за контролиране на незадължителни предупреждения
Прагма за ограничаване на опасни конструкции
Прагма за включване/изключване поддръжката на на UTF-8 в изходния код (Обичате уникод, нали така?).
Отпечатва низ или списък от низове на екрана.
Буквален низ (скаларна стойност).
Разделителят за входен запис – нов ред по подразбиране. Променя идеята на Perl за това какво е ред.
Вижте това знание приложено в практиката: http://git.io/1JIGsA
Източници
● 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 chromatichttp://www.onyxneon.com/books/modern_perl/
● See also: books.perl.org
Въведение в Perl
Въпроси?
С любезното съдействие на http://chainsolutions.net/