36
Курс по програмиране на Perl Въведение в Perl Въведение в Perl Автор: Красимир Беров, Превод: Теодора Берова I-can.eu С любезното съдействие на Chain Solutions

Въведение в Perl

Embed Size (px)

DESCRIPTION

Това е превод на български от Теодора Берова на първият урок от поредицата уроци, които водих преди време за QA-отдела на голяма международна компания, по покана на Светлин Наков. Искам да го споделя с всеки, който търси непреходни знания за Perl. Обновяванията след 1ви юни 2014 и преводът са направени с подкрепата на Chain Solutions (http://chainsolutions.net/). Таблица със съдържанието на курса може да бъде намерена на http://i-can.eu/ . Изходният код на примерите и уроците в ODP формат се намират на адрес https://github.com/kberov/PerlProgrammingCourse/ .

Citation preview

Page 1: Въведение в Perl

Курс по програмиране на Perl

Въведение в PerlВъведение в Perl

Автор: Красимир Беров, Превод: Теодора Берова

I-can.eu С любезното съдействие на Chain Solutions

Page 2: Въведение в Perl

Съдържание

1. Кратка история

2. Основни понятия. Интерпретиран (скриптов) или компилиран?

3. Виртуална машина и платформена независимост

4. Защо Perl?

5. CPAN и PPM

6. Инсталиране под (Windows/Unix)

7. Основен синтаксис

8. Вградени оператори и функции

9. Hello World (Здравей Свят)

10.Източници

Page 3: Въведение в Perl

Кратка история

● 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.

Page 4: Въведение в Perl

Основни понятия

● P.E.R.L (Pathologically Eclectick Rubish Lister – патологично-еклектично средство за извеждане на безсмислици)или P.E.R.L (Practical Extraction and Report Language – практичен език за извличане и отчети)

● Езици за програмиране● Интерпретирани и компилирани езици

Page 5: Въведение в Perl

Основни понятия

● Езици за програмиране● C/C++● Java● Tcl● Perl● PHP● Ruby● JavaScript

Page 6: Въведение в Perl

Основни понятия

● Интерпретиран или компилиран език е Perl?

Page 7: Въведение в Perl

Основни понятия

● Интерпретиран?

– Един интерпретиран език се нуждае от програма, наречена интерпретатор, която да обработва изходния код всеки път, когато стартирате програмата.

– Интерпретаторът превръща изходния код в машинен код, за да го разчете машината.

– Изходният код е за хора.

● Повече информация:

– perlhack/Принципи на работата на интерпретатора

– perlguts/Компилираният код● Интерпретирани езици: Perl, PHP, Python, Ruby...

Page 8: Въведение в Perl

Основни понятия

● Компилиран?

– Компилираният език използва компилатор, който обработва кода еднократно.

– След това, вие можете да пускате получения машинен код много пъти на много машини, без да е нужно да се компилира отново.

● Компилирани езици: C,C++, D, Delphy,..

● Байтово компилирани езици: Java, Python, Perl (Parrot-Perl6) :)...

● Байтовият код също е независим от машината

– толкова е преносим, колкото и самия изходен код

(виж perlcompile, B::Bytecode).

Page 9: Въведение в Perl

Виртуална машина● Виртуална машина == perl като

програма/интерпретатор● Работата на интерпретатора се дели на два

основни етапа:

– компилиране на кода до състояние удобно за вътрешна употреба от интерпретатора (байткод)

– изпълнение на кода.● Виртуалната машина на Perl 6 – Parrot, е по-

скоро като Java и .NET

Page 10: Въведение в Perl

Виртуална машина

● Кратък преглед на етапите на работа на perl– Компилиране

● Стартиране● Обработка на изходния/програмния код

(синтактичен анализ)● Компилация и оптимизация

– Изпълнение● Изпълняване/Работа● Обработка на изключения

Page 11: Въведение в 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;}}

Page 12: Въведение в Perl

Защо 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);

Page 13: Въведение в Perl

Защо Perl?

● Преносим– Perl е пренесен на почти всички съвременни

операционни системи, като Windows, Mac OS X, Linux, Unix (където е създаден) и мнго други...

● Език от много високо ниво– Не ви кара да мислите за неясни неща, като

разпределяне на паметта, процесор (CPU) и др.

Page 14: Въведение в Perl

Защо Perl?

● „Говори“ текста (във всякакво кодиране).

● „Мисли“ за файловете от гледна точка на редове и изречения (по подразбиране) или както сте му казали да го прави.

● Има вградени мощни регулярни изрази.if( $lines[$_] =~ /^--\s*?\[(\w+)\]/ ){if( $lines[$_] =~ /^--\s*?\[(\w+)\]/ ){ $key = $1;$key = $1;}}

ВНИМАНИЕ!!!Не пишете мърляв код, само защото ви е по-лесно. В повечето случаи вашият код ще живее по-дълго, отколкото очаквате, и се получава грозно!!!

Page 15: Въведение в Perl

Защо Perl?

● И накрая, – Защото така искате

– Защото вашият шеф иска така :)...

Page 16: Въведение в Perl

CPAN и PPM

● CPAN (Comprehensive Perl Archive Network) е най-големият източник на многократно използваем и стандартизиран perl-код.Използвайте програмата cpan, за да инсталирате, компилирате и обновявате модули, ако имате C компилатор.

● PPM (Perl Package Manager) е инструмент на ActiveState за инсталиране на прекомпилирани perl-модули.Това улеснява работата по намирането, инсталирането, обновяването и премахването на Perl пакети под Windows. Използвайте програмата ppm, която върви с ActivePerl.

Page 17: Въведение в Perl

Инсталиране (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

Page 18: Въведение в Perl

Основи на синтаксиса

● Един Perl скрипт или програма се състои от една или повече конструкции.

● Тези конструкции са записани в скрипта по разбираем и прост начин.

● Не е необходимо да съдържат функцията main() или нещо от тоя род.

Page 19: Въведение в Perl

Основи на синтаксиса

● Конструкциите в Perl завършват с точка и запетая (;)

#this is a fully functional program#this is a fully functional programprint "Hello, world";print "Hello, world";

Page 20: Въведение в Perl

Основи на синтаксиса

● Коментарите започват със символа диез (#) и важат до края на реда.

#this is a fully functional program with comment#this is a fully functional program with commentprint "Hello, world";print "Hello, world";

Page 21: Въведение в Perl

Основи на синтаксиса

● Паузите са без значение...

printprint "Hello, world""Hello, world" ;;

Page 22: Въведение в Perl

Основи на синтаксиса

● ...освен когато са вътре в низ с кавички (“...”)

# this would print with a line-break in the middle# this would print with a line-break in the middleprint "Helloprint "Helloworld";world";

Page 23: Въведение в Perl

Основи на синтаксиса

● Двойни или единични кавички могат да се използват около литерални (буквални) низове.

print "Hello, world";print "Hello, world";print 'Hello, world';print 'Hello, world';

Page 24: Въведение в Perl

Основи на синтаксиса

● Забележка: Променливи и специални знаци - като знака за нов ред (\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

Page 25: Въведение в Perl

Основи на синтаксиса

● Числата не се нуждаят от кавички

print 42;print 42;

Page 26: Въведение в Perl

Основи на синтаксиса

● Можете да използвате скоби за аргументите на функциите, или пък да пропуснете – това е въпрос на личен стил.

● Изискват се само когато може да възникнат проблеми с приоритетите (кой израз се изпълнява по-напред).

print("Hello, world\n");print("Hello, world\n");print "Hello, world\n";print "Hello, world\n";

Page 27: Въведение в Perl

Вградени оператори и функции● Perl върви с богат избор от вградени

функции. ● Пълен списък с функциите на:

http://perldoc.perl.org/perlfunc.html● Можете да прочетете за всяка отделна

функция и като въведете на командния ред следното: perldoc -f functionname.

● Пълната документация на операторите: http://perldoc.perl.org/perlop.html

● Ето някои от най-използваните.

Page 28: Въведение в Perl

Вградени оператори и функции● Математически оператори

+ събиране

- изваждане

* умножение

/ деление

Page 29: Въведение в Perl

Вградени оператори и функции● Сравнение на числа (Numeric comparison)

== равенство

!= неравенство

< по-малко

> по-голямо

<= по-малко или равно

>= по-голямо или равно

Page 30: Въведение в Perl

Вградени оператори и функции● Сравнение на низове (String comparison)

eq равенство

ne неравенство

lt по-малко

gt по-голямо

le по-малко или равно

ge по-голямо или равно

● Защо има отделни сравнения за числа и за низове?

– Perl няма специални типове променливи.

– perl трябва да знае как ще сортира – по числов или по азбучен ред (по-точно – според кодовата таблица).

Page 31: Въведение в Perl

Вградени оператори и функции● Булева логика

&& and (и)

|| or (или)

! not (не)● and, or и not не са просто описания на операторите

Те са:

– операторите сами по себе си

– по-читаеми и ясни от операторите в C-стил

– с по-нисък приоритет от && и „приятели“● Виж perlop

Page 32: Въведение в Perl

Вградени оператори и функции● Някои други оператори:

= присвояване

. конкатенация (съединяване на няколко низа в един)

x оператор за повторение (умножение) на низ

.. оператор за поредици (създава списък от числа)

Page 33: Въведение в Perl

Вградени оператори и функции● Много оператори могат да се комбинират със

знака =

$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";

Page 34: Въведение в Perl

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

Page 35: Въведение в Perl

Източници

● 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

Page 36: Въведение в Perl

Въведение в Perl

Въпроси?

С любезното съдействие на http://chainsolutions.net/