Perl
Pojawienie się | |
---|---|
Paradygmat | |
Typowanie | |
Aktualna wersja stabilna |
5.40.0 |
Twórca | |
Licencja | |
Platforma sprzętowa | |
Platforma systemowa | |
Strona internetowa |
Perl – interpretowany, dynamiczny język programowania wysokiego poziomu autorstwa Larry’ego Walla początkowo przeznaczony głównie do pracy z danymi tekstowymi, obecnie używany do wielu innych zastosowań. Wzorowany na takich językach jak C, skryptowe: sed, awk i sh, i inne.
Licencja
[edytuj | edytuj kod]Perl to wolne oprogramowanie, dostępne pod licencjami GPL i artystyczną. Perl jest dostępny dla wielu systemów operacyjnych, lecz jego naturalne środowisko to Unix i jego pochodne. Rośnie popularność Perla w środowisku Microsoft Windows. Jako przykład praktycznego zastosowania Perla można podać oprogramowanie Wikipedii, które aż do stycznia 2002 było skryptem CGI napisanym w Perlu.
Filozofia Perla
[edytuj | edytuj kod]Język Perl został zaprojektowany jako praktyczne narzędzie do analizy plików tekstowych i tworzenia raportów. Jednym z naczelnych haseł jest Można to zrobić na różne sposoby (ang. There is more than one way to do it – TIMTOWTDI[2] – wymawiane jak Tim Toady). Jednym z podstawowych zamysłów projektu było uczynienie łatwych zadań łatwymi do wykonania, zaś trudnych – wykonalnymi. Wszechstronność Perla pozwala na programowanie w różnych modelach: proceduralnym, funkcyjnym czy obiektowym, chociaż purystom przeszkadza podejście polegające na przedkładaniu wygody programisty nad czystość projektu.
Umożliwia powiązanie systemów i struktur danych, których współpraca nie była przewidywana w momencie projektowania.
Raku
[edytuj | edytuj kod]Obecnie rozwijany jest Raku[3], który jest nowym językiem programowania, znacznie różniącym się od aktualnej wersji Perla[4]. Najbardziej zaawansowaną implementacją tego nowego języka jest Rakudo[5], który działa, używając maszyny wirtualnej Parrot. Informacje o planowanych zmianach między wersją 5 i 6 są publikowane na stronie perl.com – głównie przez Larry’ego Walla (cykl artykułów „Apocalypse”[6]) i Damiana Conwaya (cykl „Exegesis”).
Do października 2019 r. Raku był nazywany Perl 6.
Zmiany w stosunku do Perla
[edytuj | edytuj kod]- Posiadanie specyfikacji[7]
- Opcjonalne typowanie statyczne[8]
- Mniejsza rygorystyczność znaków zmiennych
- Parametry formalne[9]
- Programowanie obiektowe[10]
- Niewymaganie nawiasów przed blokami przepływu sterowania i wokół literałów tablic
- Łączenie porównań (np.
0 <= $liczba <= 4
) - Identyfikatory mogą zawierać myślniki (-) i apostrofy ('), ale nie mogą być one na początku lub na końcu identyfikatora
- Wartościowanie leniwe[11] i zbieranie (gather)
- Złączenia (junction) wartości[11]
- Makra[12]
Rozwój Perla 5
[edytuj | edytuj kod]Rozwój aktualnej wersji języka, czyli Perl 5, jest wciąż kontynuowany. Nowe wersje testowe pojawiają się w miesięcznych odstępach, a większe zmiany są publikowane około raz na rok.
CPAN
[edytuj | edytuj kod]Dostępna jest olbrzymia kolekcja modułów perlowych. Można je pobrać z archiwów CPAN (np. www.cpan.org). Można znaleźć moduły między innymi do zaawansowanych obliczeń matematycznych, dostępu do baz danych czy zagadnień sieciowych. Większość, jeśli nie wszystkie, modułów udostępnianych przez CPAN jest dostępna na zasadach Licencji Artystycznej, GPL lub obydwu.
Interpreter
[edytuj | edytuj kod]Chociaż Perl posiada większość cech języka interpretowanego, nie wykonuje ściśle każdego wiersza kodu źródłowego po kolei. Program jest najpierw kompilowany do kodu pośredniego (podobnie jak Java); jednocześnie dokonywana jest jego optymalizacja. Możliwe jest skompilowanie programu do kodu pośredniego i używanie go zamiast postaci źródłowej, jednak nadal konieczny jest interpreter – program wykonujący.
Kontekst
[edytuj | edytuj kod]Cechą specyficzną Perla jest wykorzystywanie znaków przedrostkowych (jak zresztą wszystkich znaków) w różnych znaczeniach zależnie od kontekstu, np:
Zapis | Znaczenie |
---|---|
$a |
zmienna skalarna $a
|
@a |
zmienna tablicowa @a
|
$a[0] |
element 0 zmiennej tablicowej @a , który to element jest skalarem
|
$#a |
wartość ostatniego indeksu zmiennej tablicowej @a
|
@$a[0] lub @{$a[0]} |
dereferencja elementu 0 zmiennej tablicowej @a , który to element jest skalarem będącym referencją do zmiennej tablicowej (wyrażenie zwraca listę)
|
@a[@b] |
lista złożona z elementów tablicy @a o indeksach będącym elementami tablicy @b
|
%a |
tablica asocjacyjna (ang. associative array) lub hash (od implementacji) %a
|
$a{klucz} |
wartość elementu o kluczu „klucz ” należącego do %a , który to element jest skalarem
|
@a{@b} |
lista złożona z wartości znajdujących się w %a o kluczach będących elementami tablicy @b (wyrażenie zwraca listę)
|
@$a{$b[0]} lub @{$a{$b[0]}} |
dereferencja wartości należącej do %a o kluczu równym wartości elementu zero tablicy @b , która to wartość (elementu %a ) jest referencją do zmiennej tablicowej
|
$a->{$b[0]}{$b[1]} lub $a->{$b[0]}->{$b[1]} |
dereferencja zmiennej skalarnej $a będącej referencją do tablicy asocjacyjnej, z której pobrany jest element odpowiadający kluczowi równemu elementowi 0 tablicy @b , następuje jego dereferencja i z powstałej tablicy asocjacyjnej pobrany jest element o kluczu równym elementowi 1 tablicy @b
|
Przez te przedrostki jest on określany czasem jako „fleksyjny język programowania”.
Przykłady kodu
[edytuj | edytuj kod]Przykład:
$_ = "Magiczna liczba to 150\n";
print;
s/\d+/-1/;
print;
Wynikiem tego programu jest:
Magiczna liczba to 150 Magiczna liczba to -1 |
Trzeci wiersz przykładu pokazuje użycie wyrażeń regularnych. Ponieważ w wierszach 2–4 nie wskazano explicite żadnej zmiennej, operacje prowadzone są na zmiennej $_
, domyślnym argumencie wielu funkcji i wyrażeń regularnych ($_
odgrywa rolę analogiczną do zaimka języków naturalnych).
Tłumaczenie na polski to:
Weź napis „Magiczna liczba to 150\n”; Wydrukuj go; Zamień w nim pierwszy ciąg cyfr na „-1”; Wydrukuj go; |
Co jest bliższe naturalnej wypowiedzi niż spotykane w innych językach nieustanne powtarzanie nazwy zmiennej:
Niech $message oznacza napis „Magiczna liczba to 150\n”; Wydrukuj $message; Zamień w $message pierwszy ciąg cyfr na „-1”; Wydrukuj $message; |
Podobnie jak dla C, urządzane są zawody w pisaniu nieczytelnego kodu. Urządzane są też zawody polegające na napisaniu jak najkrótszego programu wykonującego dane zadanie (Perl golf).
Nieco bardziej skomplikowany przykład:
$_ = "Magiczna liczba to 150\n";
print;
s/ (\d+) / $1 * 2 /ex;
print;
Wynikiem jest:
Magiczna liczba to 150 Magiczna liczba to 300 |
$1
to fragment tekstu pasujący do wzorca w pierwszym (tu jedynym) nawiasie a /ex
mówi by ignorować wstawiane dla przejrzystości spacje wewnątrz wzorców (litera x
od extended) oraz by wykonać gotowy tekst (litera e
od evaluate) jako program w perlu (bez tego wynikiem byłoby: Magiczna liczba to 150 * 2
).
Zmienne predefiniowane
[edytuj | edytuj kod]W języku Perl wyróżniamy m.in. następujące zmienne predefiniowane:
- $_ – jest to domyślny argument funkcji, w przypadku gdy jest ich więcej, zapisują się w tablicy @_.
- $$ – Zawiera PID skryptu.
- $< – ID użytkownika, który uruchamia skrypt.
- $? – Status wyjścia ostatniego wywołania system().
- $. – Numer linii w czytanym pliku.
- @ARGV – Jeżeli skrypt zostanie uruchomiony z dodatkowymi parametrami, są one zapisywane na kolejnych miejscach w globalnej tablicy @ARGV. Można się do niej odwoływać tak jak do zwykłych tablic.
Potomkowie Perla
[edytuj | edytuj kod]Powstało kilka języków wykorzystujących pewne cechy Perla. Najbardziej znane z nich to PHP[13], Ruby i Python.
Zobacz też
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ Jednym z najczęściej kojarzonych symboli języka Perl jest wielbłąd. Skojarzenie to wzięło się z okładki jednej z pierwszych książek o języku Perl wydanych przez wydawnictwo O’Reilly Media, które zastrzega sobie część praw do tego symbolu. Źródło: O’Reilly: The Perl Camel Usage and Trademark Information. [dostęp 2017-08-25]. [zarchiwizowane z tego adresu (2017-08-13)]. (ang.).
- ↑ There is more than one way to do it na stronie WikiWikiWeb (ang.).
- ↑ Grupa rozwijająca język Raku w serwisie Github. [dostęp 2016-06-08]. (ang.).
- ↑ Tadeusz Sośnierz, Filip Sergot. Cześć, Perl 6!. „Programista”, s. 20–23, październik 2015. ISSN 2084-9400. [dostęp 2016-06-08]. Cytat: Perl 6 nie jest, jak nazwa sugeruje, kolejną wersją 25-letniego już Perla. Jest to kompletnie nowy język, porzucający wszelką kompatybilność wsteczną i w zamyśle miał zawsze być alternatywą dla równolegle rozwijanego Perla 5, nie zaś językiem, który ma go zastąpić. (pol.).
- ↑ rakudo.org (ang.).
- ↑ Larry Wall: Perl6 – Apocalypse. [dostęp 2016-06-08]. (ang.).
- ↑ Larry Wall, Synopsis 1: Overview [online], design.raku.org, 10 sierpnia 2004 [dostęp 2022-12-08] (ang.).
- ↑ Larry Wall, Synopsis 2: Bits and Pieces [online], design.raku.org, 20 maja 2009 [dostęp 2022-12-08] (ang.).
- ↑ Larry Wall, Synopsis 6: Subroutines [online], design.raku.org, 21 marca 2003 [dostęp 2022-12-08] .
- ↑ Larry Wall, Synopsis 12: Objects [online], design.raku.org, 18 sierpnia 2006 [dostęp 2022-12-08] (ang.).
- ↑ a b Larry Wall, Synopsis 9: Data Structures [online], design.raku.org, 13 września 2004 [dostęp 2022-12-08] (ang.).
- ↑ Macros, [w:] Damian Conway i inni, Synopsis 6: Subroutines, design.raku.org, 21 marca 2003 [dostęp 2022-12-08] .
- ↑ Historia PHP. [dostęp 2017-08-25].
Linki zewnętrzne
[edytuj | edytuj kod]- Perl, the first postmodern computer language – Larry Wall o języku Perl (ang.)