Perl | |
---|---|
Clasa de limba | limbaj de programare |
Aparut in | 1987 [3] |
Autor | Larry Wall |
Dezvoltator | Larry Wall [1] și Fundația Perl [d] [2] |
Extensie de fișier | .pl[4] sau [4].pm |
Eliberare | 5.36.0 (28 mai 2022 ) |
Tip sistem | dinamică slabă |
A fost influențat | C++ , C [1] , sed , AWK , BASIC , Lisp și shell-ul UNIX |
influențat | Raku , Ruby , PHP , Groovy , JavaScript |
Licență | Licență artistică [d] [5]și Licență publică generală GNU, versiunea 1.0 sau mai recentă [d] [6][7] |
Site-ul web |
perl.org dev.perl.org/perl5/ |
OS | Linux [8] , macOS [8] , Microsoft Windows [8] , Solaris [8] , AIX [8] și HP-UX [8] |
Fișiere media la Wikimedia Commons |
Perl este un limbaj de programare dinamic interpretat la nivel înalt de scop general, creat de Larry Wall , un lingvist de pregătire. Denumirea limbii este oficial pentru Practical Extraction and Report Language („limbaj practic pentru extragerea datelor și compilarea rapoartelor”) [9] , iar în glumă - ca Pathologically Eclectic Rubbish Lister („pathologically eclectic rubbish lister”) [9] ; dezvoltatorii de limbaje nu consideră numele său un acronim [10] . Inițial, numele a fost format din cinci caractere și în această formă a coincis exact cu cuvântul englezesc pearl („perlă”). Dar apoi s-a știut că există o astfel de limbă (vezi PERLA ), iar litera „a” a fost eliminată. Simbolul limbii Perl este cămila - animal nu foarte frumos, dar foarte rezistent, capabil să muncească din greu.
Caracteristica principală a limbajului este posibilitățile sale bogate de lucru cu text, inclusiv lucrul cu expresii regulate încorporate în sintaxă. Perl a moștenit multe proprietăți din limbaje de scripting shell C , AWK , UNIX .
Perl este renumit pentru colecția sa uriașă de module suplimentare CPAN (aproximativ 200.000 ) care își îmbunătățesc foarte mult capacitățile. Colecția CPAN se află la https://www.cpan.org .
Perl este un limbaj de programare de uz general care a fost creat inițial pentru manipularea textului, dar este utilizat acum pentru o gamă largă de sarcini, inclusiv administrarea sistemului , dezvoltarea web , programarea în rețea , jocurile, bioinformatica și dezvoltarea interfeței grafice cu utilizatorul .
Limbajul poate fi caracterizat mai mult ca practic (ușurință de utilizare, eficiență, completitudine) decât frumos (eleganță, minimalism) [11] . Principalele avantaje ale limbajului sunt suportul pentru diferite paradigme ( stiluri de programare procedurale , orientate pe obiecte și funcționale ), controlul memoriei (fără colector de gunoi bazat pe bucle), suport încorporat pentru procesarea textului, precum și o colecție mare de terți . - module de petrecere .
Potrivit lui Larry Wall , Perl are două motto-uri. Primul este „ Există mai mult de o modalitate de a face acest lucru ”, cunoscut și sub acronimul TMTOWTDI . Al doilea slogan este „ Lucrurile ușoare ar trebui să fie ușoare și lucrurile grele ar trebui să fie posibile ”.
Structura generală a Perl își are originile în limbajul C. Perl este de natură procedurală , cu variabile , expresii de atribuire , blocuri de cod separate prin acolade , structuri de control și funcții .
De asemenea, Perl împrumută o serie de caracteristici din limbajele de programare shell UNIX . Toate variabilele sunt marcate cu caractere de început care exprimă exact tipul de date al variabilei în acel context (de exemplu, scalar, matrice, hash). Important este că aceste semne permit interpolarea variabilelor în șiruri. Perl are multe funcții încorporate care oferă instrumente adesea folosite pentru programarea shell, cum ar fi sortarea sau apelarea serviciilor de sistem.
Perl împrumută tablouri de la Lisp , expresii regulate din AWK și sed și hash -uri („matrice asociative”) de la AWK. Expresiile regulate facilitează multe sarcini de analizare, procesare a textului și manipulare a datelor.
Perl 5 a adăugat suport pentru tipuri de date complexe, funcții de primă clasă ( închidere ca valoare) și un model obiect. Acesta din urmă include referințe , pachete, execuția metodelor dintr-o clasă, variabile cu o declarație de sferă lexicală și directive ale compilatorului (de exemplu, strict). Cea mai mare îmbunătățire introdusă în Perl 5 a fost capacitatea de a pune cod în „pachete” ( pachet ) ca module pentru reutilizare. Larry Wall a remarcat mai târziu că „Întregul scop al sistemului modular al lui Perl 5 a fost să încurajeze creșterea culturii lui Perl, nu liniile de cod” [12] .
Toate versiunile de Perl fac tastarea automată a datelor și gestionarea automată a memoriei. Interpretul cunoaște tipul și cerințele de memorie ale fiecărui obiect de program, alocă și eliberează memorie prin numărarea referințelor . Traducerea unui tip de date în altul - de exemplu, un număr într-un șir - are loc automat în timpul executării, traducerile imposibile ale tipurilor de date duc la o eroare fatală.
Lucrați în WindowsUtilizatorii Microsoft Windows folosesc de obicei distribuții cu binare pre-compilate, cum ar fi ActivePerl sau Strawberry Perl , deoarece compilarea Perl din sursă pe acel sistem de operare nu este o sarcină ușoară. Sarcina poate fi simplificată de Cygwin .
Larry Wall a început să dezvolte Perl în 1987 în timp ce lucra ca programator pentru Unisys [13] . Versiunea 1.0 a fost lansată și anunțată pe grupul de știri comp.sources.misc pe 18 decembrie 1987 [14] ca „înlocuitorul” pentru awk și sed ”.
Perl 2 a fost lansat în 1988 . Principala inovație a fost un motor de expresie regulată reproiectat . Perl 3, lansat în 1989, a câștigat capacitatea de a procesa fluxuri de date binare .
Inițial, singura documentație pentru Perl a fost o singură pagină de manual (cu lungime mare) . În 1991, Programming Perl (cunoscut de mulți programatori sub numele de Camel Book din cauza imaginii de copertă) a fost lansat și a devenit standardul limbajului de facto . În același timp, versiunea limbii a fost „actualizată” la 4, nu atât pentru a indica schimbări semnificative, cât pentru a indica faptul că această versiune a limbii a fost documentată de carte.
Perl 4 a trecut printr-o serie de lansări, oprindu-se la Perl 4.036 în 1993 . În acest moment, Larry Wall a abandonat Perl 4 și a început să lucreze la Perl 5. Dezvoltarea lui Perl 5 a început în 1994. În același timp, lista de corespondență perl5-porters a fost creată pentru a coordona activitatea de portare a Perl 5 pe diverse platforme. Este încă forumul principal pentru dezvoltarea, întreținerea și portarea Perl 5 [15] .
Perl 5.000 a fost lansat pe 17 octombrie 1994 . [16] Include un interpret complet rescris , precum și multe caracteristici noi ale limbajului, cum ar fi obiecte , referințe , variabile locale ( my $var_name) și module . Modulele au fost o parte deosebit de importantă, deoarece au oferit un mecanism de extindere a limbajului fără a modifica interpretul. Acest lucru a permis interpretului să se stabilizeze, dar a permis și programatorilor obișnuiți Perl să adauge noi caracteristici limbajului. Perl 5 este în dezvoltare activă până în prezent.
Perl 5.001 a fost lansat pe 13 martie 1995. Perl 5.002 a fost lansat pe 29 februarie 1996 cu suport pentru prototipuri noi. Acest lucru a permis autorilor de module să creeze funcții care se comportau la fel ca funcțiile încorporate ale lui Perl. Perl 5.003 a fost lansat pe 25 iunie 1996 și a remediat problemele de securitate care fuseseră descoperite.
Unul dintre cele mai importante evenimente din istoria Perl 5 s-a petrecut în afara limbajului în sine și a fost o consecință a suportului modulului. Pe 26 octombrie 1995, CPAN ( Comprehensive Perl Archive Network ) și-a început activitatea , care a devenit un depozit de module Perl , precum și codul sursă al limbajului în sine. În prezent, CPAN are peste 198.600 de module create de peste 14.000 de programatori [17] [18] .
Perl 5.004 a fost lansat pe 15 mai 1997 și conținea, printre altele, pachetul UNIVERSAL, care a oferit limbajului un obiect de bază din care au derivat automat toate clasele. A fost inclusă și posibilitatea de a solicita versiunea modulelor. În plus, Perl a început să accepte Microsoft Windows, precum și o serie de alte sisteme de operare.
Perl 5.005 a fost lansat pe 22 iunie 1998 . Această versiune a inclus câteva îmbunătățiri ale motorului regex, noi cârlige pentru backend prin module B::*, un operator de citat qr//pentru expresiile regulate, o selecție mare de alte module noi și suport pentru o serie de sisteme de operare, în special BeOS .
Perl 5.6 a fost lansat pe 22 martie 2000 . Schimbările majore au inclus suport pentru sisteme pe 64 de biți, reprezentarea șirurilor Unicode , suport pentru fișiere mari (fișiere mai mari de 2 GB ) și cuvântul cheie our[19] [20] . În timpul dezvoltării Perl 5.6, s-a luat decizia de a schimba schema de denumire a versiunilor cu una mai apropiată de cea a altor proiecte open source. Versiunea 5.005_63 a fost urmată de versiunea 5.5.640; conform planului, versiunilor de dezvoltare urmau să li se atribuie numere impare, versiuni stabile pare.
În 2000, Larry Wall a lansat un apel către comunitate pentru a discuta în mod activ propunerile pentru următoarea versiune a Perl. Rezultatul acestei discuții au fost 361 RFC ( Request for Comments - „request for comments”), care au fost folosite în dezvoltarea Perl 6 . În 2001 [21] au început lucrările la un document final care rezumă propunerile pentru o nouă generație de Perl. Rezultatul nu a fost prezentat ca un document formal, ci ca un rezumat al tuturor RFC-urilor. Până atunci, Perl 6 exista doar ca o descriere a limbii.
Versiunile 5.8.xPerl 5.8 a fost lansat pentru prima dată pe 18 iulie 2002 și de atunci a primit o actualizare anuală. Cea mai recentă versiune de Perl 5.8, 5.8.9, a fost lansată pe 14 decembrie 2008. Perl 5.8 a îmbunătățit suportul Unicode, a adăugat o nouă implementare I/O, a adăugat suport multithreading, a crescut precizia numerică și a adăugat câteva module noi [22] .
În 2004, au început lucrările la Sinopsis - conceput inițial ca o serie de documente care sintetizează documentul final menționat mai sus. Cu toate acestea, acest set de documente a devenit treptat specificația Perl 6. În februarie 2005, Otrius Tan a început să lucreze la Pugs , un interpret Perl 6 scris în Haskell [23] . Aceasta a fost prima încercare reală de a face din Perl 6 realitate. Această încercare a dispărut în 2006.
Versiunile 5.10.xPe 18 decembrie 2007, cea de-a 20-a aniversare a Perl 1.0, a fost lansat Perl 5.10.0. Această versiune conținea o serie de inovații notabile care o aduceau mai aproape de Perl 6 . Unele dintre aceste inovații sunt declarații de comutare noi (numite „dată”/„când”), actualizări ale expresiilor regulate și operatorul de potrivire „inteligent” „~~” [24] [25] .
În această perioadă, dezvoltarea a început în mod serios pentru o nouă implementare a Perl 6, cunoscută sub numele de Rakudo Perl , dezvoltată împreună cu mașina virtuală Parrot . Din noiembrie 2009, Rakudo Perl a fost actualizat în mod regulat în fiecare lună și este în prezent cea mai completă implementare a Perl 6 .
Versiunile 5.11.xO schimbare semnificativă în procesul de dezvoltare pentru Perl 5 a avut loc după introducerea lui Perl 5.11. Comunitatea dezvoltatorilor a trecut la un ciclu de lansare lunar, data lansării fiind planificată cu trei luni înainte.
Versiunile 5.12.xPe 12 aprilie 2010, Perl 5.12.0 a fost lansat publicului. Inovațiile notabile includ suport pentru sintaxă nouă package NAME VERSION, operatorul Yada Yada (folosit pentru a marca codul substituent care nu a fost încă implementat), o soluție completă la problema Y2038 (Y2038), supraîncărcarea operatorului de expresie regulată, suport pentru DTrace (cadru de urmărire dinamică), precum și suport complet pentru standardul Unicode 5.2 [26] . Pe 7 septembrie 2010, Perl 5.12.2 a fost lansat, iar pe 21 ianuarie 2011 , Perl 5.12.3 a fost lansat. Aceste versiuni conțin actualizări ale modulelor, precum și unele modificări ale documentației [27] [28] . Versiunea 5.12.4 a fost lansată pe 20 iunie 2011. Cea mai recentă versiune a acestei ramuri, 5.12.5, a fost lansată pe 10 noiembrie 2012.
Versiunile 5.14.xPe 14 mai 2011 , Perl 5.14 a fost lansat. Suportul JSON a fost încorporat începând cu versiunea 5.14.2. Cea mai recentă versiune a acestei ramuri, 5.14.4, a fost lansată pe 10 martie 2013.
Versiunile 5.16.xPe 20 mai 2012 , Perl 5.16 a fost lansat. O caracteristică nouă semnificativă este capacitatea de a specifica versiunea corectă a Perl de emulat, permițând utilizatorilor să actualizeze Perl, dar să păstreze scripturile vechi care altfel ar fi incompatibile cu noua versiune încă funcțională [29] . Nucleul Perl 5.16 acceptă Unicode 6.1 [29] .
Versiunile 5.18.xPe 18 mai 2013 , Perl 5.18 a fost lansat. Inovațiile semnificative includ noi cârlige dtrace, funcții lexicale, creșterea numărului de funcții incluse în nucleu, revizuiri ale implementării hashurilor din motive de securitate, suport pentru Unicode 6.2 [30] .
Versiunile 5.20.x - 5.26.xVersiunea 5.20 a fost lansată pe 27 mai 2014 [31] .
Pe 16 aprilie 2015 a fost anunțată lansarea așteptată a versiunii 5.22 [32] , pe 9 mai 2016 versiunea 5.24 [33] a fost lansată .
Pe 30 mai 2017 , a fost lansată următoarea versiune stabilă numărul 26 [34] .
Versiunile 5.28.xVersiunea 5.28.0 a fost lansată pe 22 iunie 2018 [35] .
Inovații cheie :
Returnează „fals” deoarece litera „e” este chirilică (mai multe despre rulările de script [36] )
Caracteristici experimentale :
Îmbunătățiri de performanță :
Alte modificari :
A fost lansat pe 20 iunie 2020 [37] și peste 13 luni de dezvoltare, aproximativ 140 de mii de linii de cod în 880 de fișiere au fost modificate. Perl 5.32 trece în suport pe termen lung pentru 5 ani sau mai mult. La „Conferința Perl și Raku în cloud” [38] , Sawyer X. a anunțat o schimbare majoră a versiunii Perl de la 5 la 7 [39] . Perl 7 este de așteptat să fie același Perl 5.32 cu setările implicite moderne.
Inovații cheie:
Câteva optimizări:
Lansat 20 mai 2021 [40] [41] . Perl 5.34.0 reprezintă aproximativ 11 luni de dezvoltare de când Perl 5.32.0 a fost lansat și conține aproximativ 280.000 de linii de modificări în 2100 de fișiere de la 78 de autori. Excluzând documentația, fișierele generate automat și instrumentele pentru crearea versiunii în sine, 150.000 de linii au fost modificate în fișierele 1300 .pm , .t , .c și .h .
Noua functionalitate:
Unii observatori au creditat lansarea Perl 5.10 cu lansarea mișcării Modern Perl [42] [43] . În special, această frază descrie un stil de dezvoltare care implică utilizarea CPAN, profitând de cele mai recente evoluții în limbaj și cerând cod de înaltă calitate [44] .
La sfârșitul anului 2012 și în 2013, au fost lansate mai multe proiecte privind o implementare alternativă a Perl 5: Perl5 în Perl6 (echipa Rakudo Perl) [45] , moe (Stephen Little și prietenii) [46] , p2 [47] (Perl11) echipa sub Reini Urban), precum și gperl (goccy) [48] .
Din 2000, a fost dezvoltată o nouă versiune (a șasea) a limbii. Spre deosebire de versiunile anterioare, dezvoltatorii plănuiesc să creeze un standard de limbaj bine definit. Compilatoare experimentale Perl 6 există în prezent , dar discuțiile suplimentare despre noile reguli continuă.
Sintaxa lui Perl are multe asemănări cu cele ale C , AWK , sed și shell-ul Bourne .
Prima linie a codului sursă poate începe cu „#!/Path/to/Perl [-switches]” - care spune sistemului calea către interpretul Perl pentru executarea programelor pe sisteme UNIX și executarea acestora pe un server web (vezi de asemenea: shebang ( Unix) ).
Cel mai simplu program " Bună, lume!" " după cum urmează:
#!/usr/bin/perl print „Bună, lume!\n” ;fie pentru CGI :
#!/usr/bin/perl print "Tip de conținut: text/html\n\n" ; printează „Bună lume!” ;fie folosind unul dintre cadrele web post-moderne
utilizați Mojolicious::Lite ; get '/' => { text => 'Bună lume!' }; aplicație -> pornire ;sau folosind specificația PSGI
my $app = sub { return [ 200 , [ 'Content-Type' => 'text/plain' ], [ "bună ziua, lume\n" ]]; }Adăugarea la un șir.
$x = 5 ; $x .= 0 ; print $x ; #cincizeciȘi așa poți imprima numărul googol .
imprimare 1 , 0 x 100 ;Tipuri de date de bază: scalar , matrice , tabel hash , funcție , indicator de fișier , intrare în tabelul de simboluri . Variabilele de diferite tipuri se disting prin semnul care precede numele variabilei:
Tip de | Simbol | Exemplu | Descriere |
---|---|---|---|
Scalar | $ | $foo | valoare unică; poate fi un număr, un șir , o referință de fișier sau un link . |
matrice | @ | @foo | O colecție ordonată de scalari. |
Tabel de hash | % | %foo | Colecție de perechi șir-scalare; șirurile de caractere se numesc chei , iar scalarii se numesc valori . Sinonimul este un tablou asociativ . |
Descriptor de fișier | < > | $foo sau FOO | O reprezentare a unui fișier deschis sau a unei alte ținte deschise pentru citire și/sau scriere. |
Funcţie | & | &foo | O bucată de cod care preia argumente, efectuează acțiuni și returnează valori. |
Intrare în tabelul de simboluri | * | *foo | Intrare în tabelul de simboluri pentru toate tipurile numită „foo”. |
Variabilele scalare sunt folosite pentru a stoca valori individuale. Ele pot conține numere, șiruri și referințe la alte obiecte . Numele unei variabile scalare trebuie să fie precedat de semnul dolar „$”. Tipul unei variabile scalare nu este fix (spre deosebire de, de exemplu, limbajul C ) și este determinat dinamic în funcție de context. De exemplu,
$x = 10 ; # număr $y = $x + 1 ; # folosește $x ca număr... $z = $x . 'șir' ; # ... și acum ca șir $ref = \ $x ; # $ref este un pointer către $x $$ref = 10 ; # $x conține valoarea 10Datele șirului trebuie incluse între ghilimele. Perl folosește două tipuri de ghilimele, ghilimele simple și ghilimele duble. Introducerea unui șir între ghilimele duble vă permite să înlocuiți automat numele variabilelor care apar cu valorile lor. Introducerea șirurilor de caractere între ghilimele simple previne acest comportament:
## Un exemplu de interpolare a variabilelor între ghilimele duble $pi = 3,141592654 ; $var1 = 'Valoarea lui Pi este $pi\n' ; print $var1 ; # Valoarea lui Pi este $pi\n $var2 = "Valoarea lui Pi este $pi\n" ; print $var2 ; # Valoarea lui Pi este 3,141592654Pentru a include ghilimele duble într-un șir care a fost ghilimele duble, utilizați \". Pentru a include ghilimele simple într-un șir cu ghilimele simple, utilizați \'. Pentru confortul de a lucra cu șiruri care conțin multe ghilimele în interior, Perl vă permite să folosiți metode alternative de citare Forma alternativă folosește orice pereche de caractere plasată după litera q (imită comportamentul ghilimelelor simple) sau qq (imită comportamentul ghilimelelor duble):
## Un exemplu de utilizare a ghilimelelor alternative $pi = 3,141592654 ; $link1 = q{<a href="http://ru.wikipedia.org/wiki/Pi">$pi</a>} ; printeaza $link1 ; # <a href="http://ru.wikipedia.org/wiki/Pi">$pi</a> $link2 = qq{<a href="http://ru.wikipedia.org/wiki/Pi ">$pi</a>} ; printeaza $link2 ; # <a href="http://ru.wikipedia.org/wiki/Pi">3.141592654</a>Un alt tip de ghilimele în Perl sunt ghilimele înapoi. Acestea conțin programe de sistem de operare a căror ieșire poate fi transmisă la interpretorul Perl. De exemplu:
## Un exemplu de utilizare a backtick-urilor pentru a executa comenzi UNIX $spațiu = `du -s -k /usr/local/bin` ; print $spatiu ; #6264 /usr/local/bin $sysuptime = `uptime` ; print $sysuptime ; # 2:24 până la 1 zi, 9:05, 1 utilizator, medii de încărcare: 0,26 0,32 0,33 MatriceUn tablou este o listă ordonată de scalari . Fiecare element de matrice are un index ordinal prin care poate fi accesat. Numerotarea elementelor începe de la zero, adică primul element al listei are indicele 0. Înainte de numele variabilei de matrice trebuie să puneți semnul „@”, iar pentru a accesa un anumit element de matrice, folosiți „$”. ', deoarece un singur element al tabloului este un scalar. Matricele multidimensionale pot fi modelate punând legături către alte liste dintr-o listă.
@array = ( 1 , 2 , 3 , 4 ); # scrieți patru elemente în tabloul @array print $array [ 2 ]; # print al treilea element print @array [ 2 , 3 ]; # imprimați al treilea și al patrulea element. # @ este folosit aici deoarece rezultatul unei operații de tăiere a matricei este, de asemenea, un tablou. Tabel hashUn tabel hash poate fi inițializat cu o matrice sau o listă formată dintr-un număr nelimitat de secvențe (cheie, valoare).
%hash = ( pisică => „pisoi” , # aici => este așa-numita „virgulă lungă”, în acest exemplu câine => „cățeluș” , # complet asemănătoare ca funcție cu cea obișnuită "," cu excepția vacii => 'vițel' # că literalele din stânga sunt implicit citate ); print $hash { 'pisica' }; #Print kitten print join ( "-" , tastele %hash ) ; # Ieșiți toate cheile. Imprimați îmbinarea tipărire pisică-câine-vacă ( "-" , valorile %hash ) ; # Afișează toate valorile. Imprimați îmbinarea de tipărire pisoi-cățel-vițel ( "-" , %hash ) ; # Tipărește pisică-pisicuță-vacă-vițel-câine, deoarece într-un context de listă hash-ul este # extins automat într-o listă (cheie, valoare). Deoarece cheile din hash nu sunt sortate, # de perechi vor fi scoase în ordine aleatorie de fiecare dată. FuncțiaUtilizare:
$s = readline * STDIN ; #Citiți o linie din STDIN (flux de intrare standard); context scalar. @valori = <FIȘIER> ; #Citirea tuturor liniilor dintr-un fișier deschis și asociat cu descriptorul FILE; contextul listei. print STDOUT $s ; #Print to STDOUT (flux de ieșire standard)Un exemplu mai precis în care typeglob este folosit pentru a transmite un descriptor de fișier unei funcții:
my $file = 'fișier.txt' ; #numele fișierului de citit deschide FH , $fișier ; #deschide fișierul meu $text = _parseFile ( * FH ); #treceți descriptorul de fișier la funcția de imprimare $text ; închide FH ; # asigurați-vă că închideți descriptorul de fișier sub _parseFile { my $fh = shift ; #get descriptor de fișier my $text = join ( '' , <$fh> ); #citește linie cu linie din descriptorul fișierului într-un șir și pune în variabila $text return $text ; }Versiunile recente de Perl au introdus capacitatea de a stoca descriptori de fișiere în scalari, iar programele mai noi preferă să folosească această metodă.
Tabelele de simboluri sunt, de asemenea, folosite pentru a asocia două nume de variabile cu o singură valoare în memorie, creând sinonime care pot fi folosite pentru a accesa și modifica valoarea la fel ca numele original. Această capacitate este baza sistemului Perl de module, clase și obiecte încărcate.
Un obiect în Perl este pur și simplu o referință asociată cu o anumită clasă (pachet). Pentru comunicare se folosește funcția de binecuvântare. Rutinele unui astfel de pachet legat sunt metode și primesc o referință ca prim argument.
Nu există o sintaxă specială pentru constructori, este folosită o rutină de pachet care returnează o referință asociată pachetului respectiv.
Există, de asemenea, multe extensii ale sistemului OOP care vă permit să schimbați sintaxa și să utilizați zahăr sintactic, printre care modulul Moose cpan și versiunea sa ușoară Moo [49] merită menționate . Moose este folosit de multe proiecte și companii mari precum BBC sau Cisco [50] .
Expresiile regulate sunt o parte importantă a Perl . Acest lucru face ca Perl să fie foarte potrivit pentru procesarea de text. Cea mai mare parte a muncii cu expresiile regulate se face folosind operatorii =~, m//și s///.
Operatorul m//este folosit pentru a testa o potrivire. În cel mai simplu caz, rezultatul expresiei $x =~ m/abc/va fi adevărat dacă și numai dacă șirul se $xpotrivește cu expresia regulată abc. De exemplu:
Exemplu | Sens |
---|---|
$x =~ /abc/ | Șirul $xconține (sub)șirul „abc”. "m" inițial al operatorului //poate fi omis atunci când este utilizat. |
$x =~ m/a(.{1,3})c/ | Șirul $xconține litera „a”, apoi oricare până la trei caractere, altele decât caracterul de nouă linie „\n”, și apoi litera „c”. |
$x =~ m{^p(erl|ugs)$}i | Șirul $xeste strict egal cu „perl” sau „pugs” și nu face distincție între majuscule și minuscule. De asemenea, în loc //de regex înconjurat de {}. |
Căutarea și înlocuirea se efectuează cu ajutorul operatorului s///. Construcția $x =~ s/abc/def/;va înlocui prima apariție a expresiei regulate abccu șirul def.
Exemplu | Sens |
---|---|
$x =~ s/abc/def/g; | Toate aparițiile (așa cum este indicată de indicatorul -global /g ) ale subșirului „abc” în $xvor fi înlocuite cu „def”. |
$x =~ s/a(.{1,3})c/!$1!/; | Prima apariție a $xliterelor „a”, apoi oricare până la trei caractere, altele decât caracterul de linie nouă „\n”, iar apoi litera „c” va fi înlocuită cu acele caractere între „a” și „c”, înconjurate de „!”. De exemplu, „sintactic” ar deveni „synt!cti!”. |
$x =~ s{^p(erl|ugs)}{"P" . lc $1}ieg; | Iată un exemplu de utilizare a modificatorului /e, care indică faptul că în loc de șirul de înlocuire se va scrie cod, al cărui rezultat ar trebui folosit. Toate aparițiile „perl” sau „pugs” în orice caz vor fi schimbate în „Perl” și, respectiv, „Pugs”. |
Odată cu apariția expresiilor regulate dinamice (??{ код Perl })și a construcției pentru includerea codului Perl executabil într-o expresie regulată, (?{ код Perl })posibilitățile de căutare și înlocuire sunt aproape nelimitate. De exemplu, a devenit posibil să se caute structuri de nivel arbitrar de cuibărit.
Expresiile regulate Perl sunt atât de populare încât sunt incluse direct în alte limbi, cum ar fi PHP și JavaScript , și există și biblioteci de pluginuri care implementează utilizarea expresiilor în limbaje compilate.
O caracteristică interesantă și des folosită a Perl este așa-numitele one-liners - programe dintr-o singură linie, de obicei specificate direct în linia de invocare a interpretului folosind -e.
Acest program va imprima numere prime :
perl - wle '(1 x $_) !~ /^(1|((11+)\3+))$/ && print while ++ $_'Acest exemplu va tipări numai liniile unice ale fișierului, cheia -nînfășoară automat linia de procesare într-o buclă care iterează prin toate liniile din fișierele specificate după textul programului:
perl - ne '$s{$_}++ || print' fisierNotă: pentru a rula comanda anterioară în Windows, înlocuiți apostrofele din ea 'cu ghilimele duble ".
În aceste exemple, Perl seamănă cu J prin concizia și incomprehensibilitatea sa la prima vedere .
De asemenea, unul dintre astfel de exemple este programul [51] , care a provocat multe controverse, este de fapt un patch Barmin (o comandă deghizată pentru a șterge recursiv toate fișierele):
echo "test... test... test..." | perl -e ' $ ??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;vezi'echo "test... test... test..." execuția acestei comenzi nu afectează munca și se adaugă, cel mai probabil, pentru a calma vigilența. Ceea ce se întâmplă în restul codului nu este deloc evident din cauza scrisului confuz în mod deliberat. Această linie conține doar trei comenzi executate secvenţial. Să scriem comanda după cum urmează:
$? ? s: ; s:s ;; $? : : s ;; = ] => % - { <-| } <&| `{; ; y; -/:-@[-` { - }; ` - { / " - ; ; s ;; $_ ; veziPrimul construct analizează $? este codul de întoarcere al comenzii anterioare. Deoarece nu au fost create procese copil înainte de această construcție, $? va conține 0, iar a doua ramură va fi executată s;;=]=>%-{<-|}<&|`{;. Această comandă, la rândul său, înlocuiește șirul din variabila acumulator $_ cu =]=>%-{<-|}<&|`{ (primul caracter după s setează delimitatorul de parametru pentru acest operator și, deși slash '/ ' sau '|', din motive de claritate, acest construct foloseste delimitatorul ';').
A doua comandă difuzează conținutul „acumulatorului” după reguli destul de complicate. Patru intervale de caractere sunt indicate în partea stângă, un interval este indicat în dreapta. Dacă extindem aceste intervale, obținem următoarea corespondență:
! „#$%&'()*+,-./:;<=>?@[\]^_`{|} `abcdefghijklmnopqrstuvwxyz{/” -Ca urmare, conținutul lui $_ devine
sistem "rm -rf /"A treia comandă, totuși, de două ori (așa cum este indicat de steag ee) „calculează” conținutul acumulatorului - comanda distructivă de mai sus - și încearcă să înlocuiască șirul gol din acumulator cu rezultatul calculului.
Perl este departe de a fi singurul limbaj care oferă capabilități de procesare a textului bogat. Limbajele de programare REFAL , Icon și Snobol oferă o oportunitate de a utiliza mai pe deplin metoda de programare „potrivire model”, din care expresiile regulate sunt un caz special.
Există, de asemenea, un shell de comandă UNIX complet bazat pe limbajul Perl. Se numește psh și vă permite să amestecați comenzile shell-ului obișnuit și Perl în sine [52] .
Puteți chiar să scrieți poezii în Perl. Una dintre aceste poezii, numită „Black Perl” („Black Pearl” sau „Black Pearl”), a fost menționată de Larry Wall într-o scrisoare a lui April Fool către Usenet . A fost scrisă inițial pentru Perl 3 și, în propriile cuvinte ale lui Larry, a simțit o satisfacție morală când poemul a eșuat analizatorul din Perl 5.
ÎNAINTE: închideți ușa , fiecare fereastră și ieșiți ; asteptati pana la timp . deschide cartea de vrăji , studiază , citește ( scanează , selectează , spune -ne ); scrieți - l , imprimați hexul întreg fiecare ceas , inversați lungimea acestuia , scrieți din nou ; ucide păianjeni , sparge - i , toca , desparte , omoară - i . deconectați brațele , schimbați , așteptați și ascultați ( ascultând , așteptați ), sortați turma ( apoi , avertizează „ caprele” și ucide „ oile ” ); ucideți - i , aruncați necazurile , schimbările morale , valorile deoparte , fiecare ; mor oaia ! muri pentru a inversa sistemul pe care îl acceptați ( respinge , respect ); următorul pas , ucide următorul sacrificiu , fiecare sacrificiu , așteptați , refaceți ritualul până când „toate spiritele sunt mulțumite” ; fă -o ( „cum se spune” ) . fă -o ( * toată lumea *** trebuie să *** să participe *** la *** interzis ** s * e * x * ) . întoarce ultima victimă ; corpul pachetului ; ieșiți din criptă ( timp , ori și „jumătate de timp” ) și închideți - o , selectați ( rapid ) și avertizați următoarea victimă ; CUVINTE: nu spune nimănui , așteaptă , așteaptă până la vreme ; așteptați până anul viitor , deceniul următor ; dormi , dormi , mori tu însuți , mori în sfârșitÎn special pentru dezvoltatorii Perl în Perl care utilizează biblioteca de interfață wxWidgets , un astfel de produs deschis precum Padre IDEscris prescurtarea pentru „Perl Application Development and Refactoring Environment” ) [53] .
Suportul Perl este inclus în IDE -ul versatil ActiveState Komodo și versiunea sa open source Komodo Edit [54] . Pentru Eclipse , suportul Perl este implementat ca pachet de extensie EPIC [53] [55] . Ambele medii includ, printre altele, un depanator vizual [56] . IntelliJ IDEA și alte produse JetBrains acceptă Perl5 printr-un plugin open source numit Camelcade .
Suportul Pearl într-o formă sau alta este disponibil în majoritatea editorilor de text pentru programatori, cum ar fi Vim multiplatformă [53] , Emacs [53] , SciTE [53] , Gedit [57] , Geany , jEdit [57] , Sublime Text , sau dedicat pentru Windows Notepad++ [53] [57] și PSPad , precum și produse shareware , cum ar fi UltraEdit și UEStudio de la IDM Computer Solutions, Inc. Pentru Mac OS , TextMate [53] poate servi ca un astfel de editor .
Editorul Perl, care face parte dintr-o linie de editori shareware specializati pentru programatori de la DzSoft [58] [59] [60] , este, de asemenea, destul de popular printre utilizatorii de Windows . Editorul gratuit Mastak Absolute Perl [61] era destul de bine cunoscut , dar dezvoltarea și suportul său au fost întrerupte, cea mai recentă versiune este datată 29 septembrie 2003 [62] . Un alt editor perl gratuit pentru Windows este Perl Express [63] (cea mai recentă versiune cu interfață rusă este 2.4.5 din 2 decembrie 2005, cu o interfață în engleză - 2.5 din 23 decembrie 2005) [64] . Alte medii de dezvoltare specializate pentru Perl includ shareware-ul IDE PerlBuilder [65] [66] [67] și editorul local Collie Perl Shell 2.0 [66] [68] .
Site-uri tematice | ||||
---|---|---|---|---|
Dicționare și enciclopedii | ||||
|
Perl | |
---|---|
oameni |
|
Lucruri | |
Cadre |
|
|
Software gratuit și open source | |
---|---|
Lucrul principal |
|
Comunitate |
|
Organizații | |
Licențe | |
Probleme | |
Alte |
|
|