Programowanie w Perlu
I Perl jest dynamicznym językiem programowania stworzonym przez Larry’ego Walla (lingwistę) w roku 1987
Perl - Wprowadzenie
I Perl jest językiem bardzo wysokiego poziomu (C – niskiego poziomu, Java – wysokiego poziomu)
Marcin Junczys-Dowmunt
I Perl jest językiem skryptowym, interpretowanym (oraz
junczys@amu.edu.pl
kompilowanym)
I Perl jest językiem proceduralnym, obiektowym lub/i
Wydział Matematyki i Informatyki
http://amu.edu.pl/~junczys
funkcjonalnym (w porównaniu: Pascal – proceduralny, Java –
obiektowy, Haskell – funkcjonalny, Prolog – deklaratywny) I Perl jest językiem wielozadaniowym ze szczególnym naciskiem na przetwarzanie dużych ilości danych w postaci tekstu
Marcin Junczys-Dowmunt
Programowanie w Perlu
1/18
Marcin Junczys-Dowmunt
Programowanie w Perlu
2/18
Krótka historia Perl
Dlaczego właśnie Perl?
I Perl powstał jako język służący do przetwarzania dużych I Larry Wall tworzy pierwszą wersję w grudniu 1987
zbiorów tekstu
I W roku 1988 powstaje wersja Perl 2, w 1989 Perl 3
I Pełna integracja wyrażeń regularnych
I Wbudowana i prosta obsługa dynamicznych struktur danych: I W roku 1991 pojawia się książka Programming Perl autorstwa list, tablic i tablic asocjacyjnych (tzw. hashe) oraz struktur Larry’ego Walla (tzw. Wielbłąd – the Camel Book). Numer
bardziej złożonych
wersji zostaje podniesiony do 4, żeby zasygnalizować zgodność I Prosta obsługa operacji wejścia/wyjścia w przypadku
z tym dziełem
wczytywania plików tekstowych
I W roku 1994 pojawia się Perl 5, który jest stale rozszerzany.
I zwięzła składnia – średnio jeden wiersz kodu Perla to tyle co 6
Najbardziej aktualną wersją jest Perl 5.8.8
wierszy C++
I W roku 1995 powstaje CPAN – Comprehensive Perl Archive
I Gigantyczna biblioteka ogólnodostępnych modułów (CPAN -
Network – zbiór rozszerzeń, który dzisiaj zawiera 11,000
Comprehensive Perl Archive Network) np. parsery XML,
modułów pochodzących od ponad 5000 autorów.
HTML, obsługa Unicode itp.
I Obecnie trwają pracę nad zupełnie nową wersją Perl 6
I Od lingwistów pracujących w przemyśle informatycznym
najczęściej wymaga się znajomość Perla
Marcin Junczys-Dowmunt
Programowanie w Perlu
3/18
Marcin Junczys-Dowmunt
Programowanie w Perlu
4/18
Poezja w Perlu - przykład
I Wokół Perla powstało coś w rodzaju subkultury zwolenników tego języka (dzieje się podobnie w przypadku innych języków Laureat pierwszego konkursu (2000) poezji pisanej w Perlu: skryptowych)
1
if (( l i g h t eq d a r k ) && ( d a r k eq l i g h t ) I Motto: ”There is more than one way to do it” – skrót:
&& ( $ b l a z e _ o f _ n i g h t { m o o n } == b l a c k _ h o l e )
&& ( $ r a v e n s _ w i n g { b r i g h t } == $ t i n { b r i g h t } ) ) {
TIMTOWTDI wymawiane jako Tim Toady
my $ l o v e = $ y o u = $ s i n { d a r k n e s s } + 1; I Ksywy:
5
};
I Practical Extraction and Report Language
Na podstawie wiersza ”The Invocation” Jim’a Steinman’a
I Pathologically Eclectic Rubbish Lister
I The Duct Tape of the Internet
I The Swiss Army Chain Saw of Programming Languages
If light were dark and dark were light
The moon a black hole in the blaze of night
I ”Obfuscated Perl Contest” – konkurs na pisanie najbardziej A raven’s wing as bright as tin
nieczytelnego programu, który nadal ”coś” robi
Then you, my love, would be darker than sin.
I Zawody poezji pisanej w Perlu, która nadal jest poprawnym programem (tzn. kompiluje się)
Marcin Junczys-Dowmunt
Programowanie w Perlu
5/18
Marcin Junczys-Dowmunt
Programowanie w Perlu
6/18
Alternatywy
Dystrybucje Perla
I Obecnie najważniejszą alternatywą do Perla jest język
skryptowy Python, któremu ostatnio mocno po piętach depcze I ActivePerl – Najpopularniejsza dystrybucja Perla dla język Ruby
Windowsa autorstwa Activision – łatwy dostęp do (nie do
I Cała trójka róźni się między sobą raczej filozofią niż
końca aktualnej wersji) CPAN poprzez PPM (Perl Package
funkcjonalnością
Manager)
I Jak dotąd Perl jest najpopularniejszym wielozadaniowym
http://www.activestate.com/store/activeperl/download/
językiem skryptowym w internecie 1
I Cygwin – Nie tyle dystrybucja Perla, raczej coś w rodzaju symulatora Linuxa pod Windowsem, zawiera wersję Perla
Więc dlaczego właśnie Perl?
http://www.cygwin.com/
Ponieważ prowadzący nie zna ani Phytona ani Ruby (podejrzewa I Istnieje wiele innych dystrybucji, ale wydają się one nie do jednak, że znajomość jednego języka z tej trójki jest w zupełności końca dopracowane
wystarczająca)
1omijamy tutaj PHP, który jest językiem przeznaczonym praktycznie tylko i wyłącznie do tworzenia stron internetowych
Marcin Junczys-Dowmunt
Programowanie w Perlu
7/18
Marcin Junczys-Dowmunt
Programowanie w Perlu
8/18
Zliczanie wyrazów - wersja czytelna
1
use s t r i c t ;
my % c o n c ;
w h i l e ( my $ l i n e = < >) {
I Programy Perl (skrypty) to zwykłe pliki tekstowe (najczęściej 5
c h o m p $ l i n e ;
z rozszerzeniem .pl)
my @ w o r d s = s p l i t /[ . \ ? , ! ; : \ ( \ ) ] + / , $ l i n e ; I Możemy je edytować dowolnym edytorem tekstu, jednak
f o r e a c h my $ w o r d ( @ w o r d s ) {
polecam edytory z podświetlaniem składni (np. EmEditor) lub if ( e x i s t s $ c o n c { $ w o r d }) {
środowiska bardziej wyspecjalizowane (np. Activision Komodo $ c o n c { $ w o r d } + + ;
Edit – darmowa wersja Komodo IDE)
10
}
e l s e {
I Skrypty wykonujemy z poziomu wiersza poleceń, wpisując
$ c o n c { $ w o r d } = 1;
perl nazwa skryptu.pl
}
}
15
}
f o r e a c h my $ w o r d ( s o r t k e y s % c o n c ) {
p r i n t " $ w o r d : $ c o n c { $ w o r d }\ n " ;
}
Marcin Junczys-Dowmunt
Programowanie w Perlu
9/18
Marcin Junczys-Dowmunt
Programowanie w Perlu
10/18
Zliczanie wyrazów - wersja hakerska
Ekonomia zapisu – wada czy zaleta?
1
w h i l e ( < >) {
c h o m p ;
I Istnieje zarzut, że taki styl programowania promuje pisanie $ c o n c { $_ }++ f o r e a c h ( s p l i t /[ \ . \ ? , ! ; : \ ( \ ) ] + / ) ; nieczytelnego kodu
}
I To prawda – jednak napisania 4 wierszy kodu zajmuje o wiele 5
p r i n t " $_ : $ c o n c { $_ }\ n " f o r e a c h ( s o r t k e y s % c o n c ); mniej czasu niż napisania 17 wierszy
Skrócenie powstało przez:
I Zaleta: Perl pozwala na pisanie programów jednym i drugim stylem: czytelnym i czystym lub szybkim i brudnym.
I Korzystanie ze zmiennych domyślnych
I Własne doświadczenie: im lepiej znamy Perla, tym chętniej I Wykorzystanie faktu, że Perl potrafi automatycznie
deklarować i definiować zmienne
korzystamy ze stylu skróconego
I Wspomniane zawody ”Obfuscated Perl”
I Zapis skrótowy pętli, jeśli wykonany jest tylko jedno polecenie I Inne mechanizmy: np. interpolacja zmiennych
Marcin Junczys-Dowmunt
Programowanie w Perlu
11/18
Marcin Junczys-Dowmunt
Programowanie w Perlu
12/18
Anatomia programu
Utwórzmy plik tekstowy hello.pl zawierający następujący wiersz: print("Hello, world!\n");
print("Hello, world!\n");
I print jest funkcją, czymś w rodzaju czasownika
I Typowy pierwszy przykład w (prawie) każdym podręczniku
I Fragmenty ujęte w nawiasie to argumenty funkcji – inaczej programowania
dopełnienia czasownika
I Wykorzystamy go do zabawy z komunikatami o błędach
I Wszytko w cudzysłowie to łańcuchy znakowy, możemy je I Dowiemy się w ten sposób jakie polecenia są według Perla traktować jak nazwy lub imiona
”gramatyczne” a jakie nie
I całość zakończoną średnikiem nazywamy instrukcją (zdania w języku naturalnym)
Najpierw wykonamy nasz program z poziomu wiersza poleceń
komendą (o ile znajdujemy się w tym samym katalogu)
I Nasz prosty program przykładowy składa się tylko z jednej instrukcji
perl hello.pl
Marcin Junczys-Dowmunt
Programowanie w Perlu
13/18
Marcin Junczys-Dowmunt
Programowanie w Perlu
14/18
Komunikaty o błędach
Komunikaty o błędach
Ćwiczenie
Teraz zmodyfikujemy nasz mały program do następującej postaci: I Proszę zmodyfikować program hello.pl
I możemy np. :
use d i a g n o s t i c s ;
I powtórzyć wiersz programu, usunąć średniki w różnych
p r i n t " Hello , w o r l d !\ n " ;
kolejnościach
I usunąć nawiasy
Powtórzymy poprzednie modyfikacje i przeanalizujemy ponownie I dodać białe znaki (spacje, taby, załamania wiersza) w
komunikaty o błędach. Tym razem będą one znacznie bardziej dowolnych miejscach programu
wyczerpujące.
I zmienić print na jakąś wersję ortograficznie niepoprawną I usunąć znaki cudzysłowu
Komunikaty zostaną wyświetlone na wyjściu błędów. Żeby móc je I zmienić znaki cudzysłowu podwójnego na cudzysłów
obejrzeć ekran po ekranie, trzeba je przekierować na wyjście pojedynczy
standardowe:
I Po każdym kroku wykonać program hello.pl i
przeanalizować komunikaty błędu (o ile się pojawią) i
perl hello.pl 2>&1 | more
wyświetlaną treść
Marcin Junczys-Dowmunt
Programowanie w Perlu
15/18
Marcin Junczys-Dowmunt
Programowanie w Perlu
16/18
Literatura
Wnioski
I Nawiasy nie są konieczne przy wywołaniu funkcji (o ile nie ma I Michael Hammond, Programming for linguists: Perl for wieloznaczności), ale zwiększają czytelność
language researchers. Oxford: Blackwell, 2003
I Białe znaki nie mają wpływu na program, o ile nie pojawiają I Randal L. Schwartz, Tom Phoenix, Brian d’Foy, Perl.
się w cudzysłowie
Wprowadzenie. Wydanie IV. O’Reilly/Helion, 2006
I Cudzysłów (podwójny lub pojedynczy) jest konieczny do
I Larry Wall, Tom Christiansen, Jon Orwant, Programming oznaczania łańcuchów znakowych
Perl. Third Edition. O’Reilly, 2000
I Ostatni średnik (wewnątrz bloku) możemy opuścić,
I Tom Christiansen, Nathan Torkington Perl Cookbook, Second opuszczenie pozostałych spowoduje wystąpienie błędu
Edition. O’Reilly, 2003
I Nasz program nie wykona się, jeśli popełniliśmy błąd
I Simon Cozen Perl. Zaawansowane programowanie. Wydanie składniowy
II. O’Reilly/Helion, 2006
I Ważna zasada: najpierw poprawiamy pierwsze pojawiające się błędy. Pozostałe mogą być wtórne
Marcin Junczys-Dowmunt
Programowanie w Perlu
17/18
Marcin Junczys-Dowmunt
Programowanie w Perlu
18/18