Čo je Perl, ako "funguje" a aké sú jeho silné stránky
Jozef Kutej

1) čo je Perl?
1) čo je Perl?
copy&paste z Wikipédie:
Perl je vyšší, všeobecný, interpretovaný, dynamický programovací jazyk.
Perl bol pôvodne vyvinul Larry Wall, liguista pracujúci ako systém
administrátor pre NASA v 1987, ako všeobecne použiteľný UNIX skriptovací
jazyk aby sa dali reporty spracovávať jednoduchšie ako pretým.
2) ako funguje
2.1) ako mnohé ďalšie/iné jazyky
- perl -le '$w="world"; print "Hello $w!"'
- print join " ", reverse split ' ', "hacker, Perl another Just"
2.2) ale aj ináč
- conferences/workshops/hackathons - 1999: 2; 2000: 3; 2001: 3; 2002: 4; 2003: 6; 2004: 12; 2005: 14; 2006: 16; 2007: 19; 2008: 27 = 101+ (zdroj)
- Perl Mongers skupín - 669 (zdroj)
- 8308 Registrovaných email adries v PM mailinglistoch (Perl cenzus 2005)
- 710+ bloggerov s 35870+ príspevkami na use.perl.org (zdroj zdroj2)
- 6900+ autorov Perl modulov (zdroj)
- 856 users, 245 channels na irc.perl.org (Sobota 25. Októbra 13:59)
3) prečo Perl?
1) Späť na začiatok
1)
- 1987
- vyšší (high-level)
- všeobecný
- interpretovaný
- dynamický
1987
- Perl 1.000 - 18 December 1987 - is unleashed upon the world
- #perl - 1988 - na EFNet (začiatky IRC)
- Perl 2.000 - 5 Jún 1988
- Perl 3.000 - 18 Október 1989
- Perl 4.000 - 21 Marec 1991
- Perl 5.000 - 18 Október 1994
- CPAN - 25 September 1995
- Perl 6.000 - ???
vyšší (high-level)
- vyššie programovacie jazyky sú jazyku nezávislé na detailoch
architektúry počítača na ktorom sa spúšťajú
- Perl funguje na 98 rôznych operačných systémoch (zdroj)
všeobecný
Perl nájde uplatnenie všade, napríklad v
- CMS systémy (ACT, Movable Type, ...)
- finančníctvo (Finance:: , zisťovanie informácií z búrz)
- výuka (Perl6)
- pri prototypoch aplikácií (potyl - Building a GUI with GTK2)
- spracovanie textu/xml (XML::)
- komunikácií (XML::RPC, SOAP, REST)
- administrovaní serverov a sietí (MRTG, Smokeping, Webmin, ...)
- web aplikáciách (Hiveminder, Intechangem, Plans, ...)
- biochémií (BioPerl.org)
- matematike (Math::)
- atď.
interpretovaný
- Perl kód sa dopredu neprekladá pre rôzne architektúry, ale vyhodnocuje
sa za "behu" - čo má svoje výhody a nevýhody
- Aj keď samotný Perl je interpretovaný umožňuje rozširovať
svoju funkčnosť prilinkovaváním binárnych (skompilovaných)
knižníc (napr. XML::LibXML, JSON::XS, Text::CSV_XS)
dynamický
Perl umožňuje
- pridávať/odoberať kód za behu
- meniť objekty za behu
- nahrávať kód JIT
2) ako funguje?
2.1) syntax
- Perl syntax je ovplyvnená - AWK, BASIC, BASIC-PLUS, C, C++, Lisp, Pascal, sed, UNIX shell
- existuje veľa Perl úvodov na webe
- zaujímavosti ukážem v slidoch "Prečo?"
2.2) Perl Culture
- za perlom sú ľudia (aj tí čo zorganizovali tento workshop)
- veľa ľudí
- nie zas tak aby sa nemohli stretnúť a poznať
- YAPC::Europe, ::Asia, ::Australia, ::Israel, ::NA, ::Rusia, ::SA - každý rok
- lokálne workshopy počas celého roka
- lokálne Perl Mongers stretnutia počas celého roka
Perl Mongers
- lokálne skupiny
- účelom je spojiť ľudí
- s rovnakým záujmom v jednej lokalite
- s rovnakým jazykom
- (ne)pravidelne sa stretávajúcimi na tech-social stretnutiach
IRC.Perl.org
- IRC - Internet Relay Chat
- IRC patrí k perlu
- IRC =~ wikipedia v IM
- žiadne heslá
- ľahká skupinová komunikácia
- #slovakia.pm
use.Perl.org
- blogy a perle
- jednoducho sa dajú pridávať priatelia
- jeden RSS feed od všetkých priateľov
3) Prečo?
easy things keep easy,
hard things possible
TIMTOWTDI
- moto
- Perl sa nesnaží programátorom nanútiť štýl programovania ani riešenia problému
- čo má svoje + a -
- jednoznačne je to sloboda oproti iným jazykom
- some like cats some like dogs
- Nič nie je samo o sebe ani dobré ani zlé. Záleží na tom, čo si o tom myslíme. --William Shakespeare
poďme tomu mysleniu pomôcť
prečo nie?
- programátor má možnosť napísať write-only kód
- pri niektorých aplikáciách môže byť interpretovaný jazyk
rýchlostne alebo pamäťovo nevyhovujúci oproti kompilovaným jazykom
- šíri sa spolu so zdrojovím kódom, nie je vhodný pre client-side
komerčné programy
Prečo ANO!
CPAN
- 14 tisíc univerzálnych riešení problémov
- 6 tisíc autorov z hádam akejkoľvek oblasti - informatika, matematika, chémia, fyzika, ...
Pod
- Plain Old Documentation format
- stačia dve kľúčové slová na písanie - "=head1" a "=cut"
- dokumentácia je súčasť kódu
- pod2docbook, pod2html, pod2latex, pod2man, pod2text
perltidy
$LOVE= AMOUR.
true.cards. ecstacy.crush
.hon.promise.de .votion.partners.
tender.truelovers. treasure.affection.
devotion.care.woo.baby.ardor.romancing.
enthusiasm.fealty.fondness.turtledoves.
lovers.sentiment.worship.sweetling.pure
.attachment.flowers.roses.promise.poem;
$LOVE=~ s/AMOUR/adore/g; @a=split(//,
$LOVE); $o.= chr (ord($a[1])+6). chr
(ord($a[3])+3). $a[16]. $a[5]. chr
(32). $a[0]. $a[(26+2)]. $a[27].
$a[5].$a[25]. $a[8].$a[3].chr
(32).$a[29]. $a[8].$a[3].
$a[62].chr(32).$a[62].
$a[2].$a[38].$a[4].
$a[3].'.';
print
$o;
perltidy
perlcritic
- kritika kódu
- ako základ je kniha Perl Best Practices
- pravidlá sa dajú prispôsobiť vlastnému štýlu
perlcritic
očistená reputácia škaredosti?
regexp
/^([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+)[._-]?)*[@]([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+))*[.]([0-9a-zA-Z]){2,3}([0-9a-zA-Z])?$/
čo "to" robí?
správny regexp na kontrolu email adresy?
/xms
regexp
/
^ # začiatok reťazca
([0-9a-zA-Z]+) # čísla a písmená
( # čísla, písmena a ._-
[._-]
([0-9a-zA-Z]+)
[._-]?
)*
[@] # zavináč
([0-9a-zA-Z]+) # čísla a písmená
( # čísla, písmena a ._-
[._-]
([0-9a-zA-Z]+)
)*
[.] # bodka
([0-9a-zA-Z]){2,3} # 2 alebo 3 čísla a písmená
([0-9a-zA-Z])? # poprípade ďalšie čísla a písmená
$ # koniec reťazca
/xms
regexp bol zobraný z live kódu a po funkčnej stránke nie je veľmi dobrý...
testy
t/
- 00-compile.t - prejde všetky zdrojové súbory a zistí či sa dajú skompilovať
- distribution.t - skontroluje či všetky meta súbory balíka sú v poriadku
a aktuálne
- perlcritic.t - Test::Perl::Critic prejde všetky zdrojové súbory a
- +perlcriticrc skontroluje či ich štýl súhlasí so zadefinovanými
- +perltidy.conf pravidlami
- pod-coverage.t - skontroluje či všetky funkcie majú dokumentáciu
- pod-spell.t - skontroluje pravopis v dokumentácií
- pod.t - skontroluje formátovanie dokumentácie
- signature.t - skontroluje integritu súborov v balíčku
Devel::Cover
- ukáže ktoré riadky/funkcie sú a na koľko pokryté testami
- príklad
The need for speed
- Profiling with NYTProf (Mike Astle Friday November 7, 2008 16:10)
- Benchmark
- a mnohé ďalšie nástroje na hľadanie pomalého kódu
- a kde nepomôže prepis tak môže pomôcť XS
rozhranie pomocou ktorého sa dajú volať C alebo C++ funkcie