Zadania wstępne
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaPerl: programowanie - Zadania wstępne
- Sprawdź, gdzie znajduje się perl w twoim systemie. W tym celu napisz which perl. Jeżeli posiadasz zainstalowanego perla, powinieneś zobaczyć rzeczywistą ścieżkę dostępu do programu wykonywalnego. Zapamiętaj ją, będziemy potem używać jej w skryptach.
- Wpisz polecenie perl -v i zobacz, jaką posiadasz wersję perla. Jeżeli potrzebujesz przypomnieć sobie, na jakiej stronie szukać pomocy, powinieneś zobaczyć adres strony - www.perl.org.
- Zobacz, jak zachowa się perl po uruchomieniu go z opcją -V. Jeżeli będziesz kiedykolwiek musiał sprawdzić, czy twój perl obsługuje na przykład wątki, to jest to właśnie odpowiednia do tego metoda.
- Perl uruchomiony bez opcji domyślnie wczytuje kod programu ze standardowego wejścia. Uruchom perla przez wpisanie polecenia perl i zobacz co się stanie. Aby powrócić do shella unixowego, wciśnij Ctrl+D.
- Obejrzyj dokumentacje do perla zainstalowaną w twoim systemie. Sprawdź, czego można się dowiedzieć, pisząc polecenia man perl; info perl oraz perldoc.
- Wykorzystaj perla jak prosty filtr działający jak polecenie grep. W tym celu przygotuj sobie plik z dużą ilością tekstu (polecenie man > plik wydaje się wystarczające). Następnie sprawdź jak na takim pliku zadziała polecenie grep:
grep 'opcja' plik
Potem wykorzystaj do tego zadania perla, używając go tak, jak pokazano na wykładzie, to znaczy:perl -ne 'print if /opcja/' plik
Porównaj rezultaty obu poleceń. Zmierz czas wykonania. Który sposób jest szybszy? Dlaczego? Spróbuj wygenerować plik w którym zapisz milion liczb od 0 do 1000000 (możesz to zrobić za pomocą języka programowania, który znasz, lub używając do tego celu perla - jeżeli go znasz :)). Sprawdź za pomocą obu podanych wyżej poleceń ile jest w takim pliku liczb, które mają w sobie ciąg 123. Które z poleceń jest szybsze? Dlaczego? - Skrajnym przypadkiem nieczytelnego kodu, w dodatku zgolfowanego, jest kod pokazany poniżej. Uruchom go i zobacz co robi:
$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;
W sam raz na walentynki. Przykład pochodzi ze strony http://www-128.ibm.com/developerworks/linux/library/l-japh.html. - Mając do dyspozycji cały internet, znajdź przykład poematu perlowego. Jakiego rodzają są to wiersze? Czy kiedykolwiek zastanawiałeś się nad tym programując?
- Sprawdź, ile pamięci zajmuje perl czekający na znak ze standardowego wejścia. Porównaj tę wielkość z pamięcią zajmowaną przez twój interpreter poleceń (shell).
- Ten punkt nie jest zadaniem, ale może być traktowany jako nieobowiązkowe przedsięwzięcie. Zapoznaj się ze stroną http://perlgolf.sourceforge.net/. Jeżeli nie znasz angielskiego, możesz opuścić to zadanie, lub nauczyć się angielskiego :) Na stronie znajdziesz wspominany na wykładzie zbiór zadań konkursu perl-golfa, wraz z rozwiązaniami. Jest to przykład wysoce specjalistycznej wiedzy z zakresu programowania i wielkiej wiedzy o języku. Czy ty także możesz pochwalić się, że jakiś język rozumiesz w tak głęboki sposób?
- Poszukaj w sieci Internet informacji o języku który nazywa się brainfuck. Gdy zobaczysz, jak się w nim programuje, zrozumiesz, że perl jest językiem daleko bardziej czytelnym, eleganckim, i bogatszym :)
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.