Perl - Perl

Perl
Programowanie-republika-perl.png
Paradygmat Wieloparadygmat : funkcjonalny , imperatywny , obiektowy ( klasowy ), refleksyjny
Zaprojektowany przez Larry Wall
Deweloper Larry Wall
Po raz pierwszy pojawiły się 1 lutego 1988 ; 33 lata temu ( 1988-02-01 )
Wersja stabilna
Wersja zapoznawcza
5.35.4 / 20 września 2021 ; 22 dni temu ( 2021-09-20 )
Dyscyplina pisania Dynamiczny
Język implementacji C
OS Wieloplatformowy
Licencja Licencja artystyczna 1.0 lub Powszechna Licencja Publiczna GNU
Rozszerzenia nazw plików .plx, .pl, .pm, .xs, .t, .pod, .cgi
Strona internetowa www .perl .org
Wpływem
AWK , BASIC , C , C++ , Lisp , sed , powłoka uniksowa
Pod wpływem
CoffeeScript , Groovy , JavaScript , Julia , LPC , PHP , Python , Raku , Ruby , PowerShell

Perl to rodzina dwa wysokiego poziomu , ogólnego przeznaczenia , interpretowanych , dynamiczny język programowania . „Perl” odnosi się do Perla 5, ale od 2000 do 2019 roku odnosił się również do jego przeprojektowanego „języka siostrzanego”, Perl 6, zanim jego nazwa została oficjalnie zmieniona na Raku w październiku 2019 roku.

Chociaż Perl nie jest oficjalnym akronimem, w użyciu są różne backronimy, w tym „Praktyczny język ekstrakcji i raportowania”. Perl został opracowany przez Larry'ego Walla w 1987 roku jako uniwersalny język skryptowy Unix , aby ułatwić przetwarzanie raportów. Od tego czasu przeszedł wiele zmian i poprawek. Raku, które rozpoczęło się jako przeprojektowanie Perla 5 w 2000 roku, ostatecznie przekształciło się w osobny język. Oba języki są nadal rozwijane niezależnie przez różne zespoły programistyczne i swobodnie pożyczają od siebie pomysły.

Języki Perla zapożyczają funkcje z innych języków programowania, takich jak C , skrypt powłoki ( sh ), AWK i sed ; Zapewniają one funkcje przetwarzania tekstu bez arbitralnych ograniczeń długości danych, które są dostępne w wielu współczesnych narzędziach wiersza poleceń systemu Unix . Perl 5 zyskał powszechną popularność pod koniec lat 90. jako język skryptowy CGI , częściowo ze względu na jego niezrównane możliwości wyrażeń regularnych i parsowania ciągów .

Oprócz CGI, Perl 5 jest używany do administrowania systemem , programowania sieciowego , finansów, bioinformatyki i innych aplikacji, takich jak GUI . Został nazwany „piłą łańcuchową armii szwajcarskiej języków skryptowych” ze względu na jego elastyczność i moc, a także brzydotę. W 1998 roku nazwano go również „ taśmą klejącą, która spaja Internet ”, zarówno w odniesieniu do jego wszechobecnego użycia jako języka klejącego, jak i postrzeganej nieelegancji.

Perl jest bardzo ekspresyjnym językiem programowania: kod źródłowy danego algorytmu może być krótki i wysoce kompresowalny.

Nazwa

Perl był pierwotnie nazywany „Perłą”. Wall chciał nadać językowi krótką nazwę o pozytywnych konotacjach. Wall odkrył istniejący język programowania PEARL przed oficjalnym wydaniem Perla i zmienił pisownię nazwy.

W odniesieniu do języka nazwa jest pisana wielkimi literami: Perl . Odnosząc się do samego programu, nazwa nie zawiera wielkich liter ( perl ), ponieważ większość systemów plików uniksowych rozróżnia wielkość liter. Przed wydaniem pierwszej edycji Perla programowania , powszechne było odwoływanie się do języka perl . Randal L. Schwartz zapisał jednak w książce nazwę języka wielką literą, aby lepiej się wyróżniała przy składaniu. To rozróżnienie przypadków zostało następnie udokumentowane jako kanoniczne.

Nazwa jest czasami rozszerzana jako backronims : Practical Extraction and Report Language oraz Wall's Pathologically Eclectic Rubbish Lister, który znajduje się na stronie podręcznika dla perla.

Historia

Wczesne wersje

Larry Wall rozpoczął pracę nad Perlem w 1987 roku, pracując jako programista w Unisys , a wersja 1.0 została opublikowana na grupie dyskusyjnej comp.sources.unix 1 lutego 1988 roku. Język rozwijał się szybko w ciągu następnych kilku lat.

Perl 2, wydany w 1988 roku, zawierał lepszy silnik wyrażeń regularnych. Perl 3, wydany w 1989 roku, dodał obsługę strumieni danych binarnych .

Pierwotnie jedyną dokumentacją dla Perla była pojedyncza, długa strona podręcznika . W 1991, Programming Perl , znany wielu programistom Perla jako "Camel Book" ze względu na okładkę, został opublikowany i stał się de facto odniesieniem dla tego języka. W tym samym czasie numer wersji Perla został zmieniony na 4, nie po to, by zaznaczyć poważną zmianę w języku, ale po to, by zidentyfikować wersję, która została dobrze udokumentowana w książce.

Wczesny Perl 5

Perl 4 przeszedł serię wydań konserwacyjnych , których kulminacją był Perl 4.036 w 1993 roku, po czym Wall porzucił Perla 4, aby rozpocząć pracę nad Perlem 5. Początkowy projekt Perla 5 kontynuowano w 1994 roku. Lista dyskusyjna perl5-porters została utworzona w maju 1994 roku, aby koordynować prace nad przeniesieniem Perla 5 na różne platformy. Pozostaje głównym forum rozwoju, utrzymania i przenoszenia Perla 5.

Perl 5.000 został wydany 17 października 1994 roku. Był prawie całkowitym przepisaniem interpretera i dodał wiele nowych funkcji do języka, w tym obiekty , referencje , zmienne leksykalne (my) i moduły . Co ważne, moduły zapewniały mechanizm rozszerzania języka bez modyfikowania tłumacza. Pozwoliło to na stabilizację rdzenia interpretera, nawet jeśli zwykłym programistom Perla umożliwiło dodawanie nowych funkcji językowych. Od tego czasu Perl 5 jest aktywnie rozwijany.

Perl 5.001 został wydany 13 marca 1995. Perl 5.002 został wydany 29 lutego 1996 z nową funkcją prototypów. Pozwoliło to autorom modułów na tworzenie podprogramów, które zachowywałyby się jak wbudowane Perl . Perl 5.003 został wydany 25 czerwca 1996 jako wydanie bezpieczeństwa.

Jedno z najważniejszych wydarzeń w historii Perla 5 miało miejsce poza właściwym językiem i było konsekwencją obsługi jego modułów. 26 października 1995 r. utworzono Comprehensive Perl Archive Network (CPAN) jako repozytorium języka Perl i modułów Perl ; od maja 2017 r. zawiera ponad 185 178 modułów w 35 190 dystrybucjach, napisanych przez ponad 13 071 autorów i znajduje się na całym świecie w ponad 245 lokalizacjach.

Perl 5.004 został wydany 15 maja 1997 roku i zawierał między innymi pakiet UNIVERSAL, dający Perlowi obiekt bazowy, z którego wszystkie klasy były automatycznie wyprowadzane oraz możliwość wymagania wersji modułów. Kolejnym znaczącym osiągnięciem było włączenie modułu CGI.pm , który przyczynił się do popularności Perla jako języka skryptowego CGI .

Perl 5.004 dodał wsparcie dla Microsoft Windows , Plan 9 , QNX i AmigaOS .

Perl 5.005 został wydany 22 lipca 1998 roku. To wydanie zawierało kilka ulepszeń silnika regex , nowe podpięcia do backendu przez B::*moduły, qr//operator cytatu regex, duży wybór innych nowych modułów podstawowych i dodano obsługę kilku innych działających systemy, w tym BeOS .

2000-2020

Wersja główna Najnowsza aktualizacja
Stara wersja, nie jest już utrzymywana: 5.4 1999-04-29
Stara wersja, nie jest już utrzymywana: 5,5 1999-03-29
Stara wersja, nie jest już utrzymywana: 5,6 2003-11-15
Stara wersja, nie jest już utrzymywana: 5,8 2008-12-14
Stara wersja, nie jest już utrzymywana: 5.10 2009-08-23
Stara wersja, nie jest już utrzymywana: 5.12 2012-11-10
Stara wersja, nie jest już utrzymywana: 5.14 2013-03-10
Stara wersja, nie jest już utrzymywana: 5.16 2013-03-11
Stara wersja, nie jest już utrzymywana: 5.18 2014-10-02
Stara wersja, nie jest już utrzymywana: 5.20 2015-09-12
Stara wersja, nie jest już utrzymywana: 5.22 2017-07-15
Stara wersja, nie jest już utrzymywana: 5.24 2018-04-14
Stara wersja, nie jest już utrzymywana: 5.26 2018-11-29
Stara wersja, nie jest już utrzymywana: 5.28 2020-06-01
Stara wersja, nie jest już utrzymywana: 5.30 2020-06-01
Starsza wersja, ale nadal utrzymywana: 5,32 2021-01-23
Aktualna stabilna wersja: 5.34 2021-05-20
Najnowsza wersja zapoznawcza przyszłej wersji: 5.35 2021-05-21
Przyszłe wydanie: 5.36 2022-05-20
Przyszłe wydanie: 7,0 2022?
Legenda:
Stara wersja
Starsza wersja, nadal utrzymywana
Obecna stabilna wersja
Najnowsza wersja
zapoznawcza Przyszła wersja

Perl 5.6 został wydany 22 marca 2000. Główne zmiany obejmowały obsługę 64-bitów , reprezentację ciągów Unicode , obsługę plików powyżej 2 GiB oraz słowo kluczowe "our". Podczas opracowywania Perla 5.6 podjęto decyzję o zmianie schematu wersjonowania na bardziej podobny do innych projektów open source; po 5.005_63 następną wersją stała się 5.5.640, z planami, aby wersje rozwojowe miały mieć numery nieparzyste, a wersje stabilne mieć numery parzyste.

W 2000 roku Wall wystosował od społeczności apel o sugestie dotyczące nowej wersji Perla. Proces ten zaowocował 361 dokumentami RFC (prośba o komentarze), które miały być wykorzystane do kierowania rozwojem Perla 6. W 2001 roku rozpoczęły się prace nad "Apocalypses" dla Perla 6, serią dokumentów mających podsumować prośby o zmiany i przedstawić projekt nowej generacji Perla. Zostały one przedstawione jako streszczenie dokumentów RFC, a nie formalny dokument. W tym momencie Perl 6 istniał tylko jako opis języka.

Perl 5.8 został wydany po raz pierwszy 18 lipca 2002 roku i od tego czasu miał prawie coroczne aktualizacje. Perl 5.8 poprawił obsługę Unicode, dodał nową implementację I/O, dodał nową implementację wątku, poprawił dokładność numeryczną i dodał kilka nowych modułów. Od 2013 roku ta wersja nadal pozostaje najpopularniejszą wersją Perla i jest używana przez Red Hat 5, Suse 10, Solaris 10, HP-UX 11.31 i AIX 5.

W 2004 roku rozpoczęto prace nad „Synopses” – dokumentami, które pierwotnie podsumowały Apocalypses, ale które stały się specyfikacją języka Perl 6. W lutym 2005 Audrey Tang rozpoczęła pracę nad Mopsami , tłumaczem Perla 6 napisanym w języku Haskell . Był to pierwszy wspólny wysiłek w celu urzeczywistnienia Perla 6. Wysiłek ten utknął w 2006 roku.

PONIE to akronim Perl On New Internal Engine. Projekt PONIE istniał od 2003 do 2006 roku i miał być pomostem pomiędzy Perl 5 i Perl 6. Podjęto próbę przepisania interpretera Perla 5, aby działał na Parrot , maszynie wirtualnej Perl 6. Celem było zapewnienie przyszłości milionów linii kodu Perl 5 w tysiącach firm na całym świecie. Projekt PONIE zakończył się w 2006 roku i nie jest już aktywnie rozwijany. Niektóre z ulepszeń wprowadzonych do interpretera Perl 5 w ramach PONIE zostały włączone do tego projektu.

18 grudnia 2007 roku, w 20. rocznicę wydania Perla 1.0, wydano Perl 5.10.0. Perl 5.10.0 zawierał godne uwagi nowe funkcje, które zbliżyły go do Perla 6. Obejmowały one instrukcję switch (zwaną "given"/"kiedy"), aktualizacje wyrażeń regularnych oraz operator inteligentnego dopasowania ' (~~). Mniej więcej w tym samym czasie na dobre rozpoczęto prace rozwojowe nad inną implementacją Perla 6, znaną jako Rakudo Perl , rozwijaną w parze z maszyną wirtualną Parrot . Od listopada 2009 r. Rakudo Perl miał regularne comiesięczne wydania i jest teraz najbardziej kompletną implementacją Perla 6.

Poważna zmiana w procesie rozwoju Perla 5 nastąpiła wraz z Perl 5.11; społeczność programistów przeszła na miesięczny cykl wydań wydań deweloperskich z rocznym harmonogramem wydań stabilnych. Zgodnie z tym planem, wydania punktowe z poprawkami błędów będą następować po wydaniach stabilnych co trzy miesiące.

12 kwietnia 2010 wydano Perl 5.12.0. Godne uwagi główne ulepszenia obejmują nową package NAME VERSIONskładnię, operator Yada Yada (przeznaczony do oznaczania kodu zastępczego, który nie został jeszcze zaimplementowany), niejawne ograniczenia, pełną zgodność z Y2038 , przeciążanie konwersji wyrażeń regularnych, obsługę DTrace i Unicode 5.2. 21 stycznia 2011 wydano Perl 5.12.3; zawiera zaktualizowane moduły i pewne zmiany w dokumentacji. Wersja 5.12.4 została wydana 20 czerwca 2011. Najnowsza wersja tej gałęzi, 5.12.5, została wydana 10 listopada 2012.

14 maja 2011 wydano Perl 5.14 z wbudowaną obsługą JSON .

20 maja 2012 r. został wydany Perl 5.16. Godne uwagi nowe funkcje obejmują możliwość określenia danej wersji Perla, którą chce się emulować, umożliwiając użytkownikom uaktualnienie ich wersji Perla, ale nadal uruchamianie starych skryptów, które normalnie byłyby niekompatybilne. Perl 5.16 aktualizuje również jądro, aby obsługiwać Unicode 6.1.

18 maja 2013 r. został wydany Perl 5.18. Godne uwagi nowe funkcje obejmują nowe haki dtrace, subsy leksykalne, więcej CORE:: subs, przeróbkę hasha ze względów bezpieczeństwa, wsparcie dla Unicode 6.2.

27 maja 2014 został wydany Perl 5.20. Godne uwagi nowe funkcje obejmują sygnatury podprogramów, wycinki haszujące/nowa składnia wycinków, dereferencja postfiksowa (eksperymentalna), Unicode 6.3, rand() przy użyciu spójnego generatora liczb losowych.

Niektórzy obserwatorzy przypisują wydanie Perla 5.10 wraz z początkiem ruchu Modern Perl. W szczególności to zdanie opisuje styl programowania, który obejmuje użycie CPAN, wykorzystuje ostatnie zmiany w języku i rygorystycznie podchodzi do tworzenia kodu wysokiej jakości. Chociaż książka „Modern Perl” może być najbardziej widocznym propagatorem tej idei, inne grupy, takie jak Enlightened Perl Organization, podjęły tę sprawę.

Pod koniec 2012 i 2013 roku, kilka projektów alternatywnych implementacjach dla Perl 5 rozpoczęty: perl5 w Perl6 przez zespół Rakudo Perl, Moe Stevan trochę i przyjaciół, p2 przez zespół Perl11 pod Reini Urban, gperl przez goccy i rperl, a Kickstarter projekt prowadzony przez Willa Braswella i powiązany z projektem Perll11.

2020 r.

W czerwcu 2020 roku Perl 7 został ogłoszony następcą Perla 5. Perl 7 miał początkowo bazować na Perlu 5.32 z wydaniem spodziewanym w pierwszej połowie 2021 roku, a kandydaci do wydania wcześniej. Plan ten został zaktualizowany w maju 2021 r., bez żadnych ram czasowych wydania ani wersji Perla 5 do wykorzystania jako podstawa. Kiedy Perl 7 zostanie wydany, Perl 5 przejdzie do długoterminowej konserwacji. Obsługiwane wersje Perla 5 będą jednak nadal otrzymywać ważne poprawki bezpieczeństwa i błędów.

Symbolika

Wielbłąd

Symbol wielbłąda używany przez O'Reilly Media

Program Programming Perl , opublikowany przez O'Reilly Media , zawiera na okładce zdjęcie dromadera i jest powszechnie nazywany „Camel Book”. Ten obraz stał się nieoficjalnym symbolem Perla, a także ogólnym emblematem hakera , pojawiającym się na koszulkach i innych elementach garderoby.

O'Reilly jest właścicielem obrazu jako znaku towarowego, ale udziela licencji do użytku niekomercyjnego , wymagającego jedynie potwierdzenia i linku do www.perl.com. Udzielanie licencji do użytku komercyjnego jest ustalane indywidualnie dla każdego przypadku. O'Reilly dostarcza również logo „Programming Republic of Perl” dla witryn niekomercyjnych oraz przyciski „Powered by Perl” dla każdej witryny korzystającej z Perla.

Cebula

Cebulowe logo używane przez The Perl Foundation

Perl Foundation jest właścicielem alternatywnego symbolu, cebuli, którą licencjonuje swoim spółkom zależnym, Perl Mongers , PerlMonks , Perl.org i innym. Symbol to wizualna gra słów na temat perłowej cebuli .

Raptor

Alternatywne logo Perl 5

Sebastian Riedel, twórca Mojolicious , stworzył logo przedstawiające raptora , które jest dostępne na licencji CC-SA w wersji 4.0. Odpowiednik raptora pochodzi z serii przemówień Matta S Trouta, które rozpoczęły się w 2010 roku.

Przegląd

Według Walla Perl ma dwa hasła. Pierwszy to „ Jest więcej niż jeden sposób na zrobienie tego ”, powszechnie znany jako TMTOWTDI. Drugie hasło to „Łatwe rzeczy powinny być łatwe, a trudne powinny być możliwe”.

Cechy

Ogólna struktura Perla wywodzi się z języka C. Perl ma charakter proceduralny , zawiera zmienne , wyrażenia , instrukcje przypisania , bloki rozdzielone nawiasami klamrowymi , struktury sterujące i podprogramy .

Perl czerpie również funkcje z programowania w powłoce. Wszystkie zmienne są oznaczone wiodącymi sigilami , które pozwalają na interpolację zmiennych bezpośrednio do łańcuchów . Jednak w przeciwieństwie do powłoki, Perl używa sigili przy wszystkich dostępach do zmiennych i w przeciwieństwie do większości innych języków programowania, które używają sigilów, sigil nie oznacza typu zmiennej, ale typ wyrażenia. Na przykład, podczas gdy tablica jest oznaczona sigilem „@” (na przykład @arrayname), pojedynczy element tablicy jest oznaczony przez sigil skalarny „$” (na przykład $arrayname[3]). Perl ma również wiele wbudowanych funkcji, które dostarczają narzędzi często używanych w programowaniu powłoki (chociaż wiele z tych narzędzi jest zaimplementowanych przez programy zewnętrzne w stosunku do powłoki), takich jak sortowanie i wywoływanie udogodnień systemu operacyjnego .

Perl pobiera skróty ("tablice asocjacyjne") z AWK i wyrażenia regularne z sed . Upraszczają one wiele zadań związanych z analizowaniem, obsługą tekstu i zarządzaniem danymi. Współdzielone z Lispem jest niejawny zwrot ostatniej wartości w bloku, a wszystkie instrukcje są również wyrażeniami, które mogą być używane w większych wyrażeniach.

Perl 5 dodał funkcje, które obsługują złożone struktury danych , funkcje pierwszej klasy (czyli domknięcia jako wartości) oraz obiektowy model programowania. Należą do nich referencje , pakiety, wysyłka metod opartych na klasach i zmienne o zasięgu leksykalnym wraz z dyrektywami kompilatora (na przykład strict pragma ). Główną dodatkową funkcją wprowadzoną w Perlu 5 była możliwość pakowania kodu jako modułów wielokrotnego użytku. Wall stwierdził później, że „Całym zamiarem systemu modułów Perla 5 było zachęcanie do rozwoju kultury Perla, a nie rdzenia Perla”.

Wszystkie wersje Perla wykonują automatyczne wpisywanie danych i automatyczne zarządzanie pamięcią . Interpreter zna typ i wymagania dotyczące przechowywania każdego obiektu danych w programie; w razie potrzeby przydziela i zwalnia pamięć za pomocą zliczania odwołań (więc nie może cofnąć alokacji okrągłych struktur danych bez ręcznej interwencji). Konwersje typu prawnego — na przykład konwersje z liczby na ciąg — są wykonywane automatycznie w czasie wykonywania ; nielegalne konwersje typów są błędami krytycznymi.

Projekt

Projekt Perla można rozumieć jako odpowiedź na trzy szerokie trendy w branży komputerowej: spadające koszty sprzętu, rosnące koszty pracy i ulepszenia technologii kompilatorów . Wiele wcześniejszych języków komputerowych, takich jak Fortran i C, miało na celu efektywne wykorzystanie drogiego sprzętu komputerowego. Natomiast Perl został zaprojektowany tak, aby programiści komputerowi mogli pisać programy szybciej i łatwiej.

Perl ma wiele funkcji, które ułatwiają pracę programisty kosztem większych wymagań dotyczących procesora i pamięci. Należą do nich automatyczne zarządzanie pamięcią; pisanie dynamiczne ; ciągi, listy i skróty; wyrażenia regularne; introspekcja ; i eval()funkcję. Perl podąża za teorią „braku wbudowanych ograniczeń”, ideą podobną do zasady Zero One Infinity .

Wall został wyszkolony jako językoznawca, a projekt Perla jest w dużej mierze oparty na zasadach językowych . Przykłady obejmują kodowanie Huffmana (powszechne konstrukcje powinny być krótkie), dobre ważenie końcowe (ważne informacje powinny być na pierwszym miejscu) oraz duży zbiór prymitywów językowych . Perl preferuje konstrukcje językowe, które są zwięzłe i naturalne do pisania przez ludzi, nawet jeśli komplikują one interpreter Perla.

Składnia Perla odzwierciedla ideę, że „rzeczy, które są różne, powinny wyglądać inaczej”. Na przykład skalary, tablice i skróty mają różne wiodące sigile. Indeksy tablicy i klucze mieszające używają różnych rodzajów nawiasów klamrowych. Ciągi i wyrażenia regularne mają różne standardowe ograniczniki. Takie podejście można skontrastować z językiem takim jak Lisp , w którym ta sama podstawowa składnia, złożona z prostych i uniwersalnych wyrażeń symbolicznych , jest używana do wszystkich celów.

Perl nie narzuca żadnego konkretnego paradygmatu programowania ( proceduralnego , obiektowego , funkcjonalnego lub innych ) ani nawet nie wymaga od programisty wyboru spośród nich.

Zarówno język Perl, jak i społeczność i kultura, które go otaczają, mają szerokie praktyczne nastawienie. Przedmowa do programowania Perl zaczyna się: „Perl jest językiem do wykonywania swojej pracy”. Jedną z konsekwencji tego jest to, że Perl nie jest językiem uporządkowanym. Zawiera wiele funkcji, toleruje wyjątki od swoich reguł i wykorzystuje heurystykę do rozwiązywania niejednoznaczności składniowych. Ze względu na wybaczającą naturę kompilatora, błędy mogą być czasami trudne do znalezienia. Dokumentacja funkcji Perla zwraca uwagę na wariantowe zachowanie funkcji wbudowanych w kontekstach listowych i skalarnych, mówiąc: „Ogólnie rzecz biorąc, robią to, co chcesz, chyba że chcesz spójności”.

Nie istnieje pisemna specyfikacja ani standard języka Perl dla wersji Perl do Perl 5 i nie ma planów stworzenia takiego dla bieżącej wersji Perla. Istniała tylko jedna implementacja tłumacza, a wraz z nią ewoluował język. Interpretator ten, wraz ze swoimi testami funkcjonalnymi, stanowi de facto specyfikację języka. Perl 6 zaczął jednak od specyfikacji, a kilka projektów ma na celu zaimplementowanie części lub całości specyfikacji.

Aplikacje

Perl ma wiele różnorodnych zastosowań, które dodatkowo potęguje dostępność wielu modułów standardowych i innych firm.

Perl był głównie używany do pisania skryptów CGI : duże projekty pisane w Perlu to cPanel , Slash , Bugzilla , RT , TWiki i Movable Type ; Witryny o dużym natężeniu ruchu, które intensywnie korzystają z Perla, obejmują Priceline.com , Craigslist , IMDb , LiveJournal , DuckDuckGo , Slashdot i Ticketmaster . Jest również opcjonalnym komponentem popularnego stosu technologii LAMP do tworzenia stron WWW , w miejsce PHP lub Pythona . Perl jest szeroko używany jako język programowania systemowego w dystrybucji Debian Linux .

Perl jest często używany jako język klejący , łączący systemy i interfejsy, które nie zostały specjalnie zaprojektowane do współdziałania, oraz do „ zaśmiecania danych ”, czyli konwertowania lub przetwarzania dużych ilości danych do zadań takich jak tworzenie raportów. W rzeczywistości te mocne strony są ze sobą ściśle powiązane. Ta kombinacja sprawia, że ​​Perl jest popularnym, uniwersalnym językiem dla administratorów systemów , szczególnie dlatego, że krótkie programy, często nazywane " programami jednowierszowymi", można wprowadzać i uruchamiać w jednym wierszu poleceń .

Kod Perla może być przenośny w systemach Windows i Unix; taki kod jest często używany przez dostawców oprogramowania (zarówno COTS, jak i na zamówienie) w celu uproszczenia pakowania i konserwacji skryptów tworzenia i wdrażania oprogramowania.

Perl/Tk i wxPerl są powszechnie używane do dodawania graficznych interfejsów użytkownika do skryptów Perla.

Realizacja

Perl jest zaimplementowany jako główny interpreter, napisany w C, wraz z dużą kolekcją modułów, napisanych w Perlu i C. Od 2010 roku interpreter ma 150 000 linijek kodu C i kompiluje się do 1 MB pliku wykonywalnego na typowej architekturze maszynowej. Alternatywnie, interpreter może być skompilowany do biblioteki linków i osadzony w innych programach. W dystrybucji znajduje się prawie 500 modułów, zawierających 200 000 linii Perla i dodatkowe 350 000 linii kodu C (większość kodu C w modułach składa się z tabel kodowania znaków ).

Interpreter ma architekturę zorientowaną obiektowo. Wszystkie elementy języka Perl — skalary, tablice, skróty, kody referencyjne, uchwyty plików — są reprezentowane w interpreterze przez struktury C . Operacje na tych strukturach są definiowane przez dużą kolekcję makr , typedefs i funkcji; stanowią one interfejs Perl C API . Perl API może być oszałamiający dla niewtajemniczonych, ale jego punkty wejścia są zgodne ze spójnym schematem nazewnictwa , który dostarcza wskazówek dla tych, którzy go używają.

Życie interpretera Perla dzieli się zasadniczo na fazę kompilacji i fazę uruchamiania. W Perlu fazy są głównymi etapami cyklu życia interpretera. Każdy tłumacz przechodzi przez każdą fazę tylko raz, a fazy następują w ustalonej kolejności.

Większość tego, co dzieje się w fazie kompilacji Perla, to kompilacja, a większość tego, co dzieje się w fazie uruchamiania Perla, to wykonanie, ale są znaczące wyjątki. Perl w istotny sposób wykorzystuje swoją zdolność do wykonywania kodu Perla podczas fazy kompilacji. Perl opóźni także kompilację do fazy uruchamiania. Terminy określające rodzaj przetwarzania, które faktycznie ma miejsce w danym momencie, to czas kompilacji i czas wykonywania . Perl jest w czasie kompilacji w większości punktów podczas fazy kompilacji, ale czas kompilacji można również wprowadzić w fazie uruchamiania. Czas kompilacji kodu w argumencie ciągu przekazanym do evalwbudowanego występuje podczas fazy uruchamiania. Perl jest często w czasie wykonywania podczas fazy kompilacji i spędza większość fazy uruchamiania w czasie wykonywania. Kod w BEGINblokach jest wykonywany w czasie wykonywania, ale w fazie kompilacji.

W czasie kompilacji interpreter przetwarza kod Perla na drzewo składni . W czasie wykonywania wykonuje program, przechodząc po drzewie . Tekst jest analizowany tylko raz, a drzewo składni przed wykonaniem podlega optymalizacji, dzięki czemu wykonanie jest stosunkowo wydajne. Optymalizacje w czasie kompilacji w drzewie składni obejmują stałe składanie i propagację kontekstu, ale przeprowadzana jest również optymalizacja wizjera .

Perl ma gramatykę Turing-complete, ponieważ na analizowanie może mieć wpływ kod wykonywany podczas fazy kompilacji. Dlatego Perl nie może być analizowany przez prostą kombinację Lex / Yacc lexer / parser . Zamiast tego interpreter implementuje własny leksykarz, który koordynuje się ze zmodyfikowanym parserem GNU Bison w celu rozwiązania niejasności w języku.

Często mówi się, że „Tylko perl może analizować Perl”, co oznacza, że ​​tylko interpreter Perla ( perl) może analizować język Perl ( Perl ), ale nawet to nie jest ogólnie prawdą. Ponieważ interpreter Perla może symulować maszynę Turinga podczas fazy kompilacji, musiałby rozwiązać problem zatrzymania , aby w każdym przypadku zakończyć parsowanie. Od dawna wynika, że ​​problem zatrzymania jest nierozstrzygnięty i dlatego nawet perl nie zawsze może przeanalizować Perla. Perl dokonuje niezwykłego wyboru, dając użytkownikowi dostęp do pełnej mocy programistycznej we własnej fazie kompilacji. Koszt pod względem teoretycznej czystości jest wysoki, ale praktyczne niedogodności wydają się rzadkie.

Inne programy, które podejmują się parsowania Perla, takie jak analizatory kodu źródłowego i automatyczne wcięcia , muszą zmagać się nie tylko z niejednoznacznymi konstrukcjami składniowymi, ale także z nierozstrzygalnością parsowania Perla w ogólnym przypadku. Projekt PPI Adama Kennedy'ego koncentrował się na parsowaniu kodu Perla jako dokumentu (zachowaniu jego integralności jako dokumentu), zamiast parsowaniu Perla jako kodu wykonywalnego (czego nawet sam Perl nie zawsze potrafi). To Kennedy jako pierwszy domyślił się, że "parsowanie Perla cierpi na 'problem zatrzymania'", co później zostało udowodnione.

Perl jest dystrybuowany z ponad 250 000 testów funkcjonalnych dla rdzenia języka Perl i ponad 250 000 testów funkcjonalnych dla modułów rdzenia. Działają one jako część normalnego procesu kompilacji i intensywnie ćwiczą interpreter i jego podstawowe moduły. Deweloperzy Perla polegają na testach funkcjonalnych, aby upewnić się, że zmiany w interpreterze nie wprowadzają błędów oprogramowania ; dodatkowo użytkownicy Perla, którzy widzą, że interpreter pomyślnie przeszedł testy funkcjonalne w ich systemie, mogą mieć dużą pewność, że działa on poprawnie.

Dostępność

Perl jest objęty podwójną licencją w ramach Licencji Artystycznej 1.0 i Powszechnej Licencji Publicznej GNU . Dystrybucje są dostępne dla większości systemów operacyjnych . Jest szczególnie rozpowszechniony w systemach uniksowych i podobnych do Uniksa , ale został przeniesiony na większość nowoczesnych (i wiele przestarzałych) platform. Z zaledwie sześcioma zgłoszonymi wyjątkami, Perl może być skompilowany z kodu źródłowego na wszystkich platformach zgodnych z POSIX lub w inny sposób kompatybilnych z Uniksem.

Ze względu na nietypowe zmiany wymagane w klasycznym środowisku Mac OS , specjalny port o nazwie MacPerl został dostarczony niezależnie.

Comprehensive Perl Archive Network niesie pełną listę obsługiwanych platform z linkami do rozkładów na każdym. CPAN jest również źródłem publicznie dostępnych modułów Perla, które nie są częścią podstawowej dystrybucji Perla.

Okna

Użytkownicy Microsoft Windows zazwyczaj instalują jedną z natywnych dystrybucji binarnych Perla dla Win32, najczęściej Strawberry Perl lub ActivePerl . Kompilacja Perla z kodu źródłowego pod Windows jest możliwa, ale w większości instalacji brakuje wymaganego kompilatora C i narzędzi do budowania. Utrudnia to również instalowanie modułów z CPAN, szczególnie tych, które są częściowo napisane w C.

ActivePerl to dystrybucja o zamkniętym kodzie źródłowym od ActiveState, która ma regularne wydania, które śledzą główne wydania Perla. Dystrybucja zawierała wcześniej menedżera pakietów Perla (PPM), popularne narzędzie do instalowania, usuwania, aktualizowania i zarządzania wykorzystaniem popularnych modułów Perla; jednak to narzędzie zostało wycofane z ActivePerl 5.28. W zestawie znajduje się również PerlScript , silnik Windows Script Host (WSH) implementujący język Perl. Visual Perl to narzędzie ActiveState, które dodaje Perla do pakietu programistycznego Visual Studio .NET. A VBScript -to-Perl konwerter, a także kompilator Perl dla Windows i konwertery awk i sed do Perl zostały również produkowane przez tę firmę i zawarte na ActiveState CD dla Windows , który obejmuje wszystkie ich rozkładów plus Komodo IDE i wszystko oprócz pierwszego na jego wariancie Unix/Linux/Posix w 2002 roku i później.

Strawberry Perl to dystrybucja typu open source dla systemu Windows. Od stycznia 2008 r. ma regularne, kwartalne wydania, w tym nowe moduły w miarę napływania opinii i próśb. Strawberry Perl ma na celu umożliwienie instalowania modułów takich jak standardowe dystrybucje Perla na innych platformach, w tym kompilacji modułów XS.

Warstwa emulacyjna Cygwin to kolejny sposób uruchamiania Perla pod Windows. Cygwin zapewnia środowisko podobne do Uniksa w systemie Windows, a zarówno Perl, jak i CPAN są dostępne jako standardowe, wstępnie skompilowane pakiety w programie instalacyjnym Cygwin. Ponieważ Cygwin zawiera również gcc , możliwa jest również kompilacja Perla ze źródeł.

Plik wykonywalny perla jest zawarty w kilku zestawach zasobów systemu Windows w katalogu wraz z innymi narzędziami skryptowymi.

Implementacje Perla są dostarczane z MKS Toolkit , Interix (baza wcześniejszych implementacji Windows Services for Unix ) i UWIN .

Interfejsy baz danych

Możliwości obsługi tekstu w Perlu mogą być używane do generowania zapytań SQL ; tablice, skróty i automatyczne zarządzanie pamięcią ułatwiają zbieranie i przetwarzanie zwracanych danych. Na przykład w interfejsie programowania aplikacji (API) Perl DBI Tima Bunce'a argumentami interfejsu API mogą być teksty zapytań SQL; dzięki temu możliwe jest programowanie w wielu językach jednocześnie (np. do generowania strony WWW za pomocą HTML , JavaScript i SQL w dokumencie here ). Użycie interpolacji zmiennych Perla w celu programowego dostosowania każdego zapytania SQL oraz specyfikacja tablic lub skrótów Perla jako struktur do programowego przechowywania wynikowych zestawów danych z każdego zapytania SQL, umożliwia wysokopoziomowy mechanizm obsługi dużych ilości danych do przetwarzania końcowego przez podprogram Perla. We wczesnych wersjach Perla interfejsy baz danych były tworzone przez ponowne połączenie interpretera z biblioteką baz danych po stronie klienta . Było to na tyle trudne, że zostało zrobione tylko dla kilku najważniejszych i najczęściej używanych baz danych, i ograniczyło wynikowy plik wykonywalny do używania tylko jednego interfejsu bazy danych na raz. perl

W Perl 5 interfejsy bazodanowe są implementowane przez moduły Perl DBI. Moduł DBI (Database Interface) przedstawia pojedynczy, niezależny od bazy danych interfejs dla aplikacji Perl, podczas gdy moduły DBD (Database Driver) obsługują szczegóły dostępu do około 50 różnych baz danych; istnieją sterowniki DBD dla większości baz danych ANSI SQL .

DBI zapewnia buforowanie dla uchwytów i zapytań bazy danych, co może znacznie poprawić wydajność w środowiskach o długim okresie wykonywania, takich jak mod perl , pomagając systemom o dużej objętości zapobiegać skokom obciążenia, jak w efekcie Slashdot .

W nowoczesnych aplikacjach Perla, zwłaszcza tych pisanych przy użyciu frameworków internetowych, takich jak Catalyst , moduł DBI jest często używany pośrednio za pośrednictwem maperów obiektowo-relacyjnych, takich jak DBIx::Class , Class::DBI lub Rose::DB::Object, które generują zapytania SQL i przetwarzać dane w sposób przejrzysty dla autora aplikacji.

Wydajność porównawcza

Gra benchmarkingowa języka komputerowego porównuje wydajność implementacji typowych problemów programistycznych w kilku językach programowania. Przesłane implementacje Perla zwykle osiągają najwyższy poziom wykorzystania pamięci i dają różne wyniki szybkości. Wydajność Perla w grze benchmarkowej jest typowa dla języków interpretowanych.

Duże programy w Perlu uruchamiają się wolniej niż podobne programy w językach skompilowanych, ponieważ perl musi kompilować źródła za każdym razem, gdy się uruchamia. W przemówieniu na konferencji YAPC::Europe 2005 i kolejnym artykule „A Timely Start” Jean-Louis Leroy stwierdził, że jego programy w Perlu działały znacznie dłużej, niż oczekiwano, ponieważ tłumacz perl poświęcił dużo czasu na znajdowanie modułów w swoim zbyt dużym uwzględnij ścieżkę. W przeciwieństwie do Javy, Pythona i Ruby, Perl ma tylko eksperymentalne wsparcie dla prekompilacji. Dlatego programy Perla płacą tę karę narzutu przy każdym wykonaniu. Faza uruchamiania typowych programów jest na tyle długa, że amortyzowany czas uruchamiania nie jest znaczny, ale testy porównawcze, które mierzą bardzo krótkie czasy wykonania, mogą być wypaczone z powodu tego obciążenia.

W celu poprawy tej sytuacji wprowadzono szereg narzędzi. Pierwszym takim narzędziem był mod perl Apache'a , który starał się rozwiązać jeden z najczęstszych powodów szybkiego wywoływania małych programów w Perlu: tworzenie stron WWW w CGI . ActivePerl , za pośrednictwem Microsoft ISAPI , zapewnia podobne ulepszenia wydajności.

Gdy kod Perla zostanie skompilowany, podczas fazy wykonywania występuje dodatkowy narzut, który zazwyczaj nie występuje w przypadku programów napisanych w językach skompilowanych, takich jak C lub C++. Przykłady takich narzutów obejmują interpretację kodu bajtowego , zarządzanie pamięcią zliczania odwołań i dynamiczne sprawdzanie typu.

Optymalizacja

Najbardziej krytyczne podprogramy mogą być napisane w innych językach (takich jak C ), które można połączyć z Perlem za pomocą prostych modułów Inline lub bardziej złożonego, ale elastycznego mechanizmu XS .

Perl 5

Perl 5, język zwykle określany jako „Perl”, jest nadal aktywnie rozwijany. Perl 5.12.0 został wydany w kwietniu 2010 z kilkoma nowymi funkcjami związanymi z projektem Perla 6, a następnie Perl 5.14.1 (wydany 17 czerwca 2011), Perl 5.16.1 (wydany 9 sierpnia 2012 r.), oraz Perl 5.18.0 (wydany 18 maja 2013 r.). Wersje rozwojowe Perla 5 są wydawane co miesiąc, a główne wydania ukazują się raz w roku.

Względny odsetek wyszukiwań w Internecie hasła „programowanie w Perlu” w porównaniu z podobnymi wyszukiwaniami innych języków programowania stale spadał z około 10% w 2005 r. do około 2% w 2011 r. do około 0,7% w 2020 r.

Raku (Perl 6)

Camelia , logo projektu Perl 6

Na konferencji Perl w 2000 r. Jon Orwant przedstawił argumentację za ważną nową inicjatywą językową. Doprowadziło to do decyzji o rozpoczęciu prac nad przeprojektowaniem języka, który miał zostać nazwany Perl 6. Propozycje nowych funkcji językowych zostały poproszone o całą społeczność Perla, która przesłała ponad 300 RFC .

Wall spędził kilka następnych lat analizując RFC i syntetyzując je w spójną strukturę dla Perla 6. Przedstawił swój projekt dla Perla 6 w serii dokumentów zwanych „apokalipsami” – ponumerowanych zgodnie z rozdziałami w Programowaniu w Perlu . Od stycznia 2011 r. rozwijająca się specyfikacja Perla 6 została zawarta w dokumentach projektowych zwanych Synopses – ponumerowanych zgodnie z Apocalypses.

Praca dyplomowa Bradleya M. Kuhna , nadzorowana przez Walla, dotyczyła możliwości wykorzystania wirtualnej maszyny Javy jako środowiska uruchomieniowego dla Perla. Teza Kuhna wykazała, że ​​takie podejście jest problematyczne. W 2001 roku zdecydowano, że Perl 6 będzie działał na wielojęzycznej maszynie wirtualnej o nazwie Parrot . Oznacza to, że inne języki, których celem jest Parrot, uzyskają natywny dostęp do CPAN , co pozwoli na pewien poziom rozwoju międzyjęzykowego.

W 2005 roku Audrey Tang stworzyła projekt Pugs , implementację Perla 6 w Haskell . Działało to i nadal działa jako platforma testowa dla języka Perl 6 (oddzielna od rozwoju rzeczywistej implementacji) – pozwalając projektantom języka na eksplorację. Projekt Mopsy zrodził aktywną wielojęzyczną społeczność Perla/Haskella, skupioną wokół kanału IRC Libera Chat #raku. Wiele wpływów programowania funkcjonalnego zostało wchłoniętych przez zespół projektowy Perla 6.

W 2012 roku rozwój Perla 6 koncentrował się głównie na dwóch kompilatorach:

  1. Rakudo , implementacja działająca na maszynie wirtualnej Parrot i maszynie wirtualnej Java.
  2. Niecza , który jest przeznaczony dla środowiska uruchomieniowego języka wspólnego .

W 2013 roku ogłoszono MoarVM („Metamodel On A Runtime”), maszynę wirtualną opartą na języku C, zaprojektowaną głównie dla Rakudo.

W październiku 2019 Perl 6 został przemianowany na Raku.

Od 2017 roku tylko implementacja Rakudo i MoarVM są aktywnie rozwijane, a inne maszyny wirtualne, takie jak Java Virtual Machine i JavaScript , są obsługiwane.

Perl 7

Perl 7 został ogłoszony 24 czerwca 2020 r. na "The Perl Conference in the Cloud" jako następca Perla 5. Oparty na Perlu 5.32, Perl 7 został zaprojektowany tak, aby był wstecznie kompatybilny z nowoczesnym kodem Perl 5; Kod Perl 5, bez nagłówka boilerplate (pragma) musi use compat::perl5;zostać dodany, aby zachować kompatybilność, ale współczesny kod może usunąć część boilerplate’u.

Społeczność Perla

Kultura i społeczność Perla rozwijała się wraz z samym językiem. Usenet był pierwszym publicznym miejscem, w którym wprowadzono Perla, ale w trakcie jego ewolucji społeczność Perla została ukształtowana przez rozwój rozszerzających się usług internetowych, w tym wprowadzenie World Wide Web. Społeczność otaczająca Perla była w rzeczywistości tematem pierwszej rozmowy Walla na temat stanu cebuli.

Stan Cebuli

State of the Onion to nazwa corocznych podsumowań w stylu przewodnim Walla na temat postępów Perla i jego społeczności. Charakteryzuje je charakterystyczny dla niego humor, zawierający odniesienia do kultury Perla, szeroko pojętej kultury hakerskiej, lingwistycznego pochodzenia Walla, czasami jego życia rodzinnego, a czasami nawet chrześcijańskiego.

Każde przemówienie jest najpierw wygłaszane na różnych konferencjach Perla, a ostatecznie jest również publikowane w Internecie.

Rozrywka w Perlu

JAPH
W wiadomościach e-mail, sieciach Usenet i forach dyskusyjnych powszechnym trendem są programy „ Jeszcze kolejny haker Perla ” (JAPH) zapoczątkowane przez Randala L. Schwartza , jednego z pierwszych profesjonalnych trenerów języka Perl. W żargonie kultury Perla, programiści Perla są znani jako hakerzy Perla i stąd wywodzi się praktyka pisania krótkich programów, które wypisują frazę „Just another haker Perl”. Zgodnie z pierwotną koncepcją, programy te są umiarkowanie zaciemnione i wystarczająco krótkie, aby zmieścić się w podpisie wiadomości e-mail lub wiadomości Usenet. „Kanoniczny” JAPH, opracowany przez Schwartza, zawiera przecinek na końcu, chociaż jest on często pomijany.
Perl golf
Perl "golf" jest rozrywką polegającą na redukowaniu liczby znaków (klawiszowych "uderzeń") używanych w programie Perla do absolutnego minimum, podobnie jak gracze w golfa starają się oddać jak najmniej uderzeń w rundzie. Pierwsze użycie tego wyrażenia podkreślało różnicę między kodem przeznaczonym dla pieszych, który ma uczyć nowicjusza, a zwięzłymi hackami, które mogą rozbawić doświadczonych programistów Perla, przykładem tych ostatnich są JAPH, które były już używane w podpisach w postach Usenet i gdzie indziej. Podobne akrobacje były nienazwaną rozrywką w języku APL w poprzednich dekadach. Użycie Perla do napisania programu szyfrującego RSA wywołało szerokie i praktyczne zainteresowanie tą rozrywką. W kolejnych latach termin „ kod golfa ” został zastosowany do rozrywek w innych językach. Perl Golf Apocalypse odbyła się na Perl Conference 4.0 w Monterey w Kalifornii w lipcu 2000 roku.
Zaciemnianie
Podobnie jak w przypadku C, pod koniec lat dziewięćdziesiątych dobrze znaną rozrywką były konkursy z zaciemnionym kodem . Konkurs Obfuscated Perl Contest był konkursem organizowanym przez The Perl Journal w latach 1996-2000, który stał się arcydziełem syntaktycznej elastyczności Perla. Nagrody przyznano za takie kategorie, jak „najpotężniejsze” — programy, które efektywnie wykorzystywały przestrzeń — oraz „najlepszy czterowierszowy podpis” dla programów, które mieszczą się w czterech wierszach po 76 znaków w stylu bloku podpisu Usenet .
Poezja
Poezja Perla to praktyka pisania wierszy, które można skompilować jako legalny kod Perla, na przykład kawałek znany jako Black Perl . Poezja Perla jest możliwa dzięki dużej liczbie angielskich słów używanych w języku Perl. Nowe wiersze są regularnie przesyłane do społeczności PerlMonks .

Perl na IRC

Istnieje wiele kanałów IRC , które oferują wsparcie dla języka i niektórych modułów.

Sieć IRC Kanały
irc.libera.czat #perl #raku
irc.perl.org #łoś #poe #katalizator #dbix-class #perl-help #distzilla #epo #corehackers #sdl #win32 #toolchain #padre #dancer
irc.slashnet.org #perlmonks
irc.ofc.net #perl
irc.efnet.net #perlpomoc
irc.rizon.net #perl
irc.debian.org #debian-perl (pakowanie modułów Perla dla Debiana)

CPAN Acme

Istnieje również wiele przykładów kodu napisanego wyłącznie dla rozrywki w CPAN . Lingua::Romana::Perligata, na przykład umożliwia pisanie programów po łacinie . Po wykonaniu takiego programu moduł tłumaczy swój kod źródłowy na zwykły Perl i uruchamia go.

Społeczność Perla odłożyła na bok przestrzeń nazw „ Acme ” dla modułów, które z natury są zabawne (ale jej zakres został poszerzony o kod eksploracyjny lub eksperymentalny lub dowolny inny moduł, który nie jest przeznaczony do użycia w produkcji). Niektóre moduły Acme są celowo zaimplementowane w zabawny sposób. Obejmuje to Acme::Bleach, jeden z pierwszych modułów w Acme::przestrzeni nazw, który pozwala na "wybielenie" kodu źródłowego programu (tj. wszystkie znaki zastąpione białymi znakami), a mimo to nadal działa.

Przykładowy kod

W starszych wersjach Perla program Hello World można by napisać jako:

print "Hello, World!\n";

Oto bardziej złożony program Perla, który odlicza sekundy od podanej wartości początkowej:

#!/usr/bin/perl
use strict;
use warnings;

my ( $remaining, $total );

$remaining = $total = shift(@ARGV);

STDOUT->autoflush(1);

while ( $remaining ) {
    printf ( "Remaining %s/%s \r", $remaining--, $total );
    sleep 1;
}

print "\n";

Interpreter perla może być również używany do jednorazowych skryptów w wierszu poleceń. Poniższy przykład (wywoływany z powłoki kompatybilnej z sh, takiej jak Bash) tłumaczy ciąg „Bob” we wszystkich plikach kończących się na .txt w bieżącym katalogu na „Robert”:

$ perl -i.bak -lp -e 's/Bob/Robert/g' *.txt

Krytyka

Perl był określany przez swoich krytyków jako „ hałas liniowy ” i język tylko do zapisu . Najwcześniejsza taka wzmianka pojawiła się w pierwszym wydaniu książki Learning Perl , podręcznika Perl 4 napisanej przez Randala L. Schwartza , w której pierwszym rozdziale stwierdza: „Tak, czasami Perl wygląda jak szum linii dla niewtajemniczonych, ale dla doświadczonego programisty Perla wygląda to jak szum linii sumy kontrolnej z misją w życiu. Stwierdził również, że oskarżenia, że ​​Perl jest językiem tylko do zapisu, można by uniknąć dzięki kodowaniu z „należytą starannością”. Dokument przeglądowy Perla perlintro stwierdza, że ​​nazwy wbudowanych "magicznych" zmiennych skalarnych "wyglądają jak interpunkcja lub szum linii". Jednak moduł angielski zapewnia zarówno długie, jak i krótkie alternatywy w języku angielskim. Dokument perlstyle stwierdza, że ​​szum linii w wyrażeniach regularnych można złagodzić za pomocą /xmodyfikatora dodawania białych znaków.

Zgodnie z FAQ Perla 6 , Perl 6 został zaprojektowany w celu złagodzenia "zwykłych podejrzanych", które wywołują roszczenia "zakłóceń linii" od krytyków Perla 5, w tym usunięcie "większości zmiennych interpunkcyjnych" i odkażanie składni regex . Perl 6 FAQ stwierdza również, że to, co jest czasem określane jako linia Perl hałas jest „rzeczywista składnia języka” tak gerunds i przyimki są częścią języka angielskiego . W poście na blogu z grudnia 2012 r., pomimo twierdzenia, że ​​„Rakudo Perl 6 zawiódł i będzie nadal zawodził, chyba że otrzyma nadzór osoby dorosłej”, chromatyczny stwierdził, że projekt Perla 6 ma „dobrze zdefiniowaną gramatykę”, a także „ ulepszony system typów, zunifikowany system obiektów z inteligentnym metamodelem, metaoperatorami i wyraźniejszym systemem kontekstu, który zapewnia takie subtelności, jak wszechobecne lenistwo”. Stwierdził również, że „Perl 6 ma spójność i konsekwencję, której brakuje w Perlu 5”.

Zobacz też

Bibliografia

Dalsza lektura

Zewnętrzne linki