Perl | |
---|---|
Sprog klasse | programmeringssprog |
Dukkede op i | 1987 [3] |
Forfatter | Larry Wall |
Udvikler | Larry Wall [1] og The Perl Foundation [d] [2] |
Filtypenavn _ | .pl[4] eller [4].pm |
Frigøre | 5.36.0 (28. maj 2022 ) |
Type system | svag dynamik |
Blev påvirket | C++ , C [1] , sed , AWK , BASIC , Lisp og UNIX-skallen |
påvirket | Raku , Ruby , PHP , Groovy , JavaScript |
Licens | Artistic License [d] [5]og GNU General Public License, version 1.0 eller nyere [d] [6][7] |
Internet side |
perl.org dev.perl.org/perl5/ |
OS | Linux [8] , macOS [8] , Microsoft Windows [8] , Solaris [8] , AIX [8] og HP-UX [8] |
Mediefiler på Wikimedia Commons |
Perl er et fortolket dynamisk programmeringssprog på højt niveau skabt af Larry Wall , en lingvist af uddannelse. Sprogets navn står officielt for Practical Extraction and Report Language ("praktisk sprog til at udtrække data og kompilere rapporter") [9] , og i spøg - som Pathologically Eclectic Rubbish Lister ("patologisk eklektisk affaldslister") [9] ; sprogudviklere betragter ikke dets navn som et akronym [10] . Oprindeligt bestod navnet af fem tegn og faldt i denne form nøjagtig sammen med det engelske ord perle ("perle"). Men så blev det kendt, at et sådant sprog eksisterede (se PERLE ), og bogstavet "a" blev fjernet. Symbolet på Perl-sproget er kamelen - ikke særlig smuk, men meget hårdfør dyr, der er i stand til at udføre hårdt arbejde.
Sprogets hovedtræk er dets rige muligheder for at arbejde med tekst, herunder arbejde med regulære udtryk indbygget i syntaksen. Perl har arvet mange egenskaber fra C , AWK , UNIX shell -scriptsprog .
Perl er berømt for sin enorme samling af CPAN -tilføjelsesmoduler (ca. 200.000 ), der i høj grad forbedrer dens muligheder. CPAN-samlingen er placeret på https://www.cpan.org .
Perl er et alment programmeringssprog, der oprindeligt blev skabt til tekstmanipulation, men som nu bruges til en lang række opgaver, herunder systemadministration , webudvikling , netværksprogrammering , spil, bioinformatik og udvikling af grafisk brugergrænseflade .
Sproget kan karakteriseres mere som praktisk (brugervenligt, effektivitet, fuldstændighed) end smukt (elegance, minimalisme) [11] . De vigtigste fordele ved sproget er understøttelse af forskellige paradigmer ( proceduremæssige , objektorienterede og funktionelle programmeringsstile), hukommelseskontrol (ingen loop-baseret skraldeopsamler), indbygget understøttelse af tekstbehandling, samt en stor samling af tredje -parti moduler .
Ifølge Larry Wall har Perl to mottoer. Den første er " Der er mere end én måde at gøre det på ", også kendt under forkortelsen TMTOWTDI . Det andet slogan er " Lette ting skal være lette og svære ting skal være muligt ".
Den generelle struktur af Perl sporer i store træk dens oprindelse til C -sproget . Perl er af proceduremæssig karakter med variabler , tildelingsudtryk , kodeblokke adskilt af krøllede parenteser , kontrolstrukturer og funktioner .
Perl låner også en række funktioner fra UNIX shell programmeringssprog . Alle variabler er markeret med ledende tegn, der udtrykker nøjagtigt variablens datatype i den sammenhæng (f.eks. skalar, matrix, hash). Det er vigtigt, at disse tegn tillader variabler at blive interpoleret i strenge. Perl har mange indbyggede funktioner, der giver værktøjer, der ofte bruges til shell-programmering, såsom sortering eller opkald af systemtjenester.
Perl låner arrays fra Lisp , regulære udtryk fra AWK og sed , og hashes ("associative arrays") fra AWK. Regulære udtryk gør mange parsing-, tekstbehandlings- og datamanipulationsopgaver nemmere.
Perl 5 tilføjede understøttelse af komplekse datatyper, førsteklasses funktioner ( lukker som en værdi) og en objektmodel. Sidstnævnte inkluderer referencer , pakker, udførelse af metoder fra en klasse, variabler med en leksikalsk omfangsdeklaration og compiler - direktiverstrict (f.eks. ). Den største forbedring introduceret i Perl 5 var muligheden for at sætte kode i "pakker" ( pakke ) som moduler til genbrug. Larry Wall bemærkede senere, at "Hele formålet med Perl 5's modulære system var at fremme væksten af Perls kultur, ikke kodelinjer" [12] .
Alle versioner af Perl udfører automatisk dataindtastning og automatisk hukommelsesstyring. Fortolkeren kender typen og hukommelseskravene for hvert programobjekt, den tildeler og frigør hukommelse ved at foretage referencetælling . Oversættelsen af en datatype til en anden - for eksempel et tal til en streng - sker automatisk under kørsel, umulige datatypeoversættelser fører til en fatal fejl.
Arbejde i WindowsMicrosoft Windows-brugere bruger normalt distributioner med prækompilerede binære filer, såsom ActivePerl eller Strawberry Perl , da kompilering af Perl fra kilden på det OS ikke er en nem opgave. Opgaven kan gøres lettere af Cygwin .
Larry Wall begyndte at udvikle Perl i 1987 , mens han arbejdede som programmør for Unisys [13] . Version 1.0 blev udgivet og annonceret på comp.sources.misc nyhedsgruppen den 18. december 1987 [14] som "erstatningen" for awk og sed ".
Perl 2 blev udgivet i 1988 . Den vigtigste nyskabelse i den var en nydesignet motor for regulære udtryk . Perl 3, udgivet i 1989, fik evnen til at behandle binære datastrømme .
Oprindeligt var den eneste dokumentation for Perl en enkelt (stor længde) man- side. I 1991 blev Programmering Perl (kendt af mange programmører som Camel Book på grund af forsidebilledet) udgivet og blev de facto sprogstandarden. Samtidig blev versionen af sproget "opgraderet" til 4, ikke så meget for at indikere væsentlige ændringer, men for at indikere, at denne version af sproget var dokumenteret af bogen.
Perl 4 gennemgik en række udgivelser, og stoppede ved Perl 4.036 i 1993 . På dette tidspunkt forlod Larry Wall Perl 4 og begyndte arbejdet med Perl 5. Udviklingen af Perl 5 begyndte i 1994. Samtidig blev perl5-porters mailingliste oprettet for at koordinere arbejdet med at overføre Perl 5 til forskellige platforme. Det er stadig det vigtigste forum for udvikling, vedligeholdelse og portering af Perl 5 [15] .
Perl 5.000 blev udgivet den 17. oktober 1994 . [16] Det omfattede en fuldstændig omskrevet tolk , såvel som mange nye sprogfunktioner såsom objekter , referencer , lokale variabler ( my $var_name) og moduler . Moduler var en særlig vigtig del, da de gav en mekanisme til at udvide sproget uden at ændre tolken. Dette gjorde det muligt for tolken at stabilisere sig, men det tillod også almindelige Perl-programmører at tilføje nye funktioner til sproget. Perl 5 er i aktiv udvikling den dag i dag.
Perl 5.001 blev udgivet den 13. marts 1995. Perl 5.002 blev udgivet den 29. februar 1996 med ny prototypeunderstøttelse. Dette gjorde det muligt for modulforfattere at skabe funktioner, der opførte sig ligesom Perls indbyggede funktioner. Perl 5.003 blev udgivet den 25. juni 1996 og løste de sikkerhedsproblemer, der var blevet opdaget.
En af de vigtigste begivenheder i Perl 5's historie skete uden for selve sproget og var en konsekvens af modulunderstøttelse. Den 26. oktober 1995 påbegyndte CPAN ( Comprehensive Perl Archive Network ) sit arbejde , som blev et lager af Perl-moduler , såvel som kildekoden til selve sproget. I øjeblikket har CPAN over 198.600 moduler skabt af over 14.000 programmører [17] [18] .
Perl 5.004 blev udgivet den 15. maj 1997 og indeholdt blandt andet UNIVERSAL-pakken, som gav sproget et basisobjekt, som alle klasser automatisk stammede fra. Muligheden for at anmode om versionen af moduler er også inkluderet. Ud over dette begyndte Perl at understøtte Microsoft Windows, samt en række andre styresystemer.
Perl 5.005 blev udgivet den 22. juni 1998 . Denne udgivelse inkluderede adskillige forbedringer til regex-motoren, nye hooks til backend via moduler B::*, en citat-operator qr//for regulære udtryk, et stort udvalg af andre nye moduler og understøttelse af en række operativsystemer, især BeOS .
Perl 5.6 blev udgivet den 22. marts 2000 . Større ændringer omfattede understøttelse af 64-bit-systemer, Unicode -strengrepræsentation , understøttelse af store filer (filer større end 2 GB ) og nøgleordet our[19] [20] . Under udviklingen af Perl 5.6 blev der truffet en beslutning om at ændre versionsnavneskemaet til et, der er tættere på det for andre open source-projekter. Version 5.005_63 blev efterfulgt af version 5.5.640; efter planen skulle udviklingsversioner tildeles ulige numre, stabile versioner endda.
I 2000 udsendte Larry Wall en opfordring til samfundet om aktivt at diskutere forslag til den næste version af Perl. Resultatet af denne diskussion var 361 RFC'er ( Request for Comments - "request for comments"), som blev brugt i udviklingen af Perl 6 . I 2001 [21] begyndte arbejdet med et endeligt dokument, der opsummerer forslag til en ny generation af Perl. Resultatet blev ikke præsenteret som et formelt dokument, men som et resumé af alle RFC'er. På dette tidspunkt eksisterede Perl 6 udelukkende som en sprogbeskrivelse.
Versioner 5.8.xPerl 5.8 blev først udgivet den 18. juli 2002 og har modtaget en årlig opdatering siden da. Den seneste version af Perl 5.8, 5.8.9, blev udgivet den 14. december 2008. Perl 5.8 forbedrede Unicode-understøttelse, tilføjede en ny I/O-implementering, tilføjede multithreading-understøttelse, øgede numerisk præcision og tilføjede flere nye moduler [22] .
I 2004 begyndte arbejdet med synopsis - oprindeligt udtænkt som en række dokumenter, der opsummerer det endelige dokument nævnt ovenfor. Dette sæt dokumenter blev dog gradvist til Perl 6-specifikationen. I februar 2005 begyndte Otrius Tan arbejdet med Pugs , en Perl 6 - tolk skrevet i Haskell [23] . Dette var det første rigtige forsøg på at gøre Perl 6 til virkelighed. Dette forsøg døde ud i 2006.
Versioner 5.10.xDen 18. december 2007, 20-årsdagen for Perl 1.0, blev Perl 5.10.0 udgivet. Denne version indeholdt en række bemærkelsesværdige innovationer, der bragte den tættere på Perl 6 . Nogle af disse innovationer er nye switch-sætninger (kaldet "givet"/"when"), regulære udtryksopdateringer og "smart" match-operatoren "~~" [24] [25] .
Omkring dette tidspunkt begyndte udviklingen for alvor på en ny implementering af Perl 6, kendt som Rakudo Perl , udviklet i forbindelse med den virtuelle Parrot -maskine . Siden november 2009 er Rakudo Perl blevet opdateret regelmæssigt hver måned og er i øjeblikket den mest komplette implementering af Perl 6 .
Versioner 5.11.xEn væsentlig ændring i udviklingsprocessen for Perl 5 skete efter introduktionen af Perl 5.11. Udviklerfællesskabet er flyttet til en månedlig udgivelsescyklus, hvor udgivelsesdatoen er planlagt tre måneder i forvejen.
Versioner 5.12.xDen 12. april 2010 blev Perl 5.12.0 frigivet til offentligheden. Bemærkelsesværdige innovationer omfatter ny syntaksunderstøttelse package NAME VERSION, Yada Yada-operatoren (bruges til at markere pladsholderkode, der endnu ikke er implementeret), en komplet løsning på Y2038-problemet (Y2038), overbelastning af regulære udtryksoperatører, understøttelse af DTrace (dynamic tracing framework), samt fuld understøttelse af Unicode 5.2-standarden [26] . Den 7. september 2010 blev Perl 5.12.2 udgivet, og den 21. januar 2011 blev Perl 5.12.3 udgivet. Disse udgivelser indeholder modulopdateringer samt nogle dokumentationsændringer [27] [28] . Version 5.12.4 blev udgivet den 20. juni 2011. Den seneste version af denne filial, 5.12.5, blev udgivet den 10. november 2012.
Versioner 5.14.xDen 14. maj 2011 blev Perl 5.14 udgivet. JSON- understøttelse har været indbygget siden version 5.14.2. Den seneste version af denne filial, 5.14.4, blev udgivet den 10. marts 2013.
Versioner 5.16.xDen 20. maj 2012 blev Perl 5.16 udgivet. En væsentlig ny funktion er evnen til at specificere den korrekte version af Perl til at emulere, hvilket giver brugerne mulighed for at opgradere Perl, men beholde gamle scripts, der ellers ville være inkompatible med den nye version, der stadig fungerer [29] . Perl 5.16 kerne understøtter Unicode 6.1 [29] .
Versioner 5.18.xDen 18. maj 2013 blev Perl 5.18 udgivet. Væsentlige innovationer inkluderer nye dtrace hooks, leksikalske funktioner, en stigning i antallet af funktioner inkluderet i kernen, revisioner af implementeringen af hashes af sikkerhedsmæssige årsager, understøttelse af Unicode 6.2 [30] .
Versioner 5.20.x - 5.26.xVersion 5.20 blev frigivet den 27. maj 2014 [31] .
Den 16. april 2015 blev den forventede udgivelse af version 5.22 [32] annonceret , den 9. maj 2016 blev version 5.24 [33] frigivet .
Den 30. maj 2017 blev den næste stabile version nummer 26 [34] frigivet .
Versioner 5.28.xVersion 5.28.0 blev frigivet den 22. juni 2018 [35] .
Vigtigste innovationer :
Returnerer "falsk" fordi bogstavet "e" er kyrillisk (mere om scriptkørsler [36] )
Eksperimentelle funktioner :
Præstationsforbedringer :
Andre ændringer :
Den blev udgivet den 20. juni 2020 [37] og over 13 måneders udvikling blev omkring 140 tusind linjer kode i 880 filer ændret. Perl 5.32 bevæger sig ind i langsigtet support i 5 år eller mere. Ved "Perl og Raku-konferencen i skyen" [38] annoncerede Sawyer X. en større versionsændring af Perl fra 5 til 7 [39] . Perl 7 forventes at være den samme Perl 5.32 med moderne standardindstillinger.
Vigtigste innovationer:
Nogle optimeringer:
Udgivet 20. maj 2021 [40] [41] . Perl 5.34.0 repræsenterer cirka 11 måneders udvikling siden Perl 5.32.0 blev frigivet og indeholder cirka 280.000 linjer med ændringer i 2100 filer fra 78 forfattere. Eksklusive dokumentation, autogenererede filer og værktøjer til at bygge selve udgivelsen, blev 150.000 linjer ændret i 1300 .pm , .t , .c og .h filer.
Ny funktionalitet:
Nogle iagttagere har krediteret udgivelsen af Perl 5.10 med lanceringen af Modern Perl- bevægelsen [42] [43] . Denne sætning beskriver især en udviklingsstil, der involverer brugen af CPAN, drager fordel af den seneste udvikling på sproget og kræver kode af høj kvalitet [44] .
I slutningen af 2012 og i 2013 blev flere projekter lanceret om en alternativ implementering af Perl 5: Perl5 i Perl6 (Rakudo Perl-teamet) [45] , moe (Stephen Little og venner) [46] , s2 [47] (Perl11) hold under Reini Urban), samt gperl (goccy) [48] .
Siden 2000 er der udviklet en ny (6.) version af sproget. I modsætning til tidligere versioner planlægger udviklerne at skabe en veldefineret sprogstandard. Eksperimentelle Perl 6 -kompilere findes i øjeblikket , men yderligere diskussion af nye regler fortsætter.
Perls syntaks deler mange ligheder med C , AWK , sed og Bourne-skallen .
Den første linje i kildekoden kan begynde med "#!/Path/to/Perl [-switches]" - som fortæller systemet stien til Perl-fortolkeren for at udføre programmer på UNIX-systemer og udføre dem på en webserver (se også: shebang ( Unix) ).
Det enkleste program " Hej, verden!" " som følger:
#!/usr/bin/perl print "Hej verden!\n" ;enten for CGI :
#!/usr/bin/perl print "Indholdstype: text/html\n\n" ; print "Hej verden!" ;enten ved at bruge en af de postmoderne web-frameworks
brug Mojolicious::Lite ; få '/' => { text => 'Hej verden!' }; app -> start ;eller ved at bruge PSGI- specifikationen
min $app = sub { return [ 200 , [ 'Content-Type' => 'text/plain' ], [ "hej verden\n" ]]; }Tilføjelse til en streng.
$x = 5 ; $x .= 0 ; udskriv $x ; #halvtredsOg sådan kan du printe nummeret googol .
print 1 , 0 x 100 ;Grundlæggende datatyper: skalar , array , hash-tabel , funktion , filmarkør , indtastning af symboltabel . Variabler af forskellige typer er kendetegnet ved tegnet, der går forud for variabelnavnet:
Type | Symbol | Eksempel | Beskrivelse |
---|---|---|---|
Skalar | $ | $foo | enkelt værdi; kan være et tal, en streng , en filreference eller et link . |
array | @ | @foo | En bestilt samling af skalarer. |
Hash bord | % | %foo | Indsamling af streng-skalar par; strenge kaldes nøgler og skalarer kaldes værdier . Synonymet er et associativt array . |
Filbeskrivelse | < > | $foo eller FOO | En repræsentation af en åben fil eller et andet mål, der er åbent til læsning og/eller skrivning. |
Fungere | & | &foo | Et stykke kode, der tager argumenter, udfører handlinger og returnerer værdier. |
Indtastning af symboltabel | * | *foo | Indtastning af symboltabel for alle typer kaldet 'foo'. |
Skalære variabler bruges til at gemme enkelte værdier. De kan indeholde tal, strenge og referencer til andre objekter . Et skalært variabelnavn skal indledes med et dollartegn '$'. Typen af en skalarvariabel er ikke fast (i modsætning til f.eks. C -sproget ) og bestemmes dynamisk afhængigt af konteksten. For eksempel,
$x = 10 ; # tal $y = $x + 1 ; # brug $x som et tal... $z = $x . 'streng' ; # ... og nu som en streng $ref = \ $x ; # $ref er en pointer til $x $$ref = 10 ; # $x indeholder værdien 10Strengdata skal være omgivet af anførselstegn. Perl bruger to slags anførselstegn, enkelte anførselstegn og dobbelte anførselstegn. Ved at omslutte en streng i dobbelte anførselstegn kan du automatisk erstatte de variabelnavne, der forekommer, med deres værdier. Ved at omslutte strenge i enkelte anførselstegn forhindrer du denne adfærd:
## Et eksempel på interpolation af variabler i dobbelte anførselstegn $pi = 3,141592654 ; $var1 = 'Værdien af Pi er $pi\n' ; print $var1 ; # Værdien af Pi er $pi\n $var2 = "Værdien af Pi er $pi\n" ; print $var2 ; # Værdien af Pi er 3,141592654For at inkludere dobbelte anførselstegn i en streng, der er blevet dobbeltciteret, skal du bruge \". For at inkludere enkelte anførselstegn i en streng med enkelt anførselstegn, skal du bruge \'. For at gøre det nemmere at arbejde med strenge, der indeholder mange anførselstegn indeni, giver Perl dig mulighed for at brug alternative citatmetoder Den alternative form bruger et hvilket som helst tegnpar, der er placeret efter bogstavet q (efterligner adfærden af enkelte anførselstegn) eller qq (efterligner adfærden af dobbelte anførselstegn):
## Et eksempel på brug af alternative citater $pi = 3,141592654 ; $link1 = q{<a href="http://ru.wikipedia.org/wiki/Pi">$pi</a>} ; print $link1 ; # <a href="http://ru.wikipedia.org/wiki/Pi">$pi</a> $link2 = qq{<a href="http://ru.wikipedia.org/wiki/Pi ">$pi</a>} ; print $link2 ; # <a href="http://ru.wikipedia.org/wiki/Pi">3.141592654</a>En anden type citater i Perl er tilbage citater. De indeholder operativsystemprogrammer, hvis output kan overføres til Perl-fortolkeren. For eksempel:
## Et eksempel på brug af backticks til at udføre UNIX-kommandoer $space = `du -s -k /usr/local/bin` ; print $space ; #6264 /usr/local/bin $sysuptime = `oppetid` ; print $sysuptime ; # 2:24 op 1 dag, 9:05, 1 bruger, belastningsgennemsnit: 0,26 0,32 0,33 ArrayEt array er en ordnet liste over skalarer . Hvert array-element har et ordinalindeks, som det kan tilgås med. Nummereringen af elementer starter fra nul, det vil sige, at det første element på listen har indeks 0. Før navnet på array-variablen skal du sætte '@'-tegnet, og for at få adgang til et specifikt array-element skal du bruge '$ '-tegn, da et enkelt element i arrayet er en skalar. Multidimensionelle arrays kan modelleres ved at sætte links til andre lister i en liste.
@array = ( 1 , 2 , 3 , 4 ); # skriv fire elementer til arrayet @array print $array [ 2 ]; # print det tredje element print @array [ 2 , 3 ]; # udskriv det tredje og fjerde element. # @ bruges her, fordi resultatet af en array slicing operation også er en array. Hash tabelEn hash-tabel kan initialiseres med et array eller en liste bestående af et ubegrænset antal sekvenser (nøgle, værdi).
%hash = ( kat => 'killing' , # her => er det såkaldte "lange komma", i dette eksempel hund => 'hvalp' , # funktionsmæssigt ligner fuldstændig almindelig "," bortset fra ko => 'kalv' # at bogstaver til venstre er implicit citeret ); print $hash { 'kat' }; #Print killing print join ( "-" , nøgler %hash ) ; # Udskriv alle taster. Udskriv cat-dog-cow print join ( "-" , værdier %hash ) ; # Vis alle værdier. Udskriv killing-hvalp-kalv print join ( "-" , %hash ) ; # Udskriver kat-killing-ko-kalv-hund-hvalp, fordi i en listesammenhæng bliver hashen automatisk # udvidet til en liste (nøgle, værdi). Da nøglerne i hashen ikke er sorteret, vil # par blive udsendt i tilfældig rækkefølge hver gang. FunktionAnvendelse:
$s = readline * STDIN ; #Læs en linje fra STDIN (standard input-stream); skalær kontekst. @values = <FIL> ; #Læsning af alle linjer fra en fil, der er åbnet og forbundet med FIL-beskrivelsen; liste kontekst. udskriv STDOUT $s ; #Udskriv til STDOUT (standard outputstream)Et mere præcist eksempel, hvor typeglob bruges til at sende en filbeskrivelse til en funktion:
min $fil = 'fil.txt' ; #navn på filen, der skal læses åben FH , $fil ; #åben fil min $text = _parseFile ( * FH ); #pass filbeskrivelsen til printfunktionen $text ; lukke FH ; # sørg for at lukke filbeskrivelsen sub _parseFile { my $fh = shift ; #get file descriptor min $text = join ( '' , <$fh> ); #læs linje for linje fra filbeskrivelsen i en streng og indsæt i variablen $text return $text ; }Nylige versioner af Perl har introduceret muligheden for at gemme filbeskrivelser i skalarer, og nyere programmer foretrækker at bruge denne metode.
Symboltabeller bruges også til at knytte to variabelnavne til en enkelt værdi i hukommelsen, hvilket skaber synonymer, der kan bruges til at få adgang til og ændre værdien ligesom det originale navn. Denne egenskab er grundlaget for Perls system af indlæsbare moduler, klasser og objekter .
Et objekt i Perl er simpelthen en reference forbundet med en bestemt klasse (pakke). Til kommunikation bruges velsignefunktionen. Rutinerne for en sådan linket pakke er metoder og modtager en reference som det første argument.
Der er ingen speciel syntaks for konstruktører, der bruges en pakkerutine, der returnerer en reference tilknyttet den pakke.
Der er også mange udvidelser til OOP-systemet, der giver dig mulighed for at ændre syntaksen og bruge syntaktisk sukker, blandt hvilke Moose cpan-modulet og dets letvægtsversion Moo [49] er værd at nævne . Moose bruges af mange projekter og store virksomheder som BBC eller Cisco [50] .
Regulære udtryk er en vigtig del af Perl . Dette gør Perl velegnet til tekstbehandling. Det meste af arbejdet med regulære udtryk udføres ved hjælp af operatorerne =~, m//og s///.
Operatøren m//bruges til at teste for et match. I det enkleste tilfælde vil resultatet af udtrykket $x =~ m/abc/være sandt, hvis og kun hvis strengen $xmatcher det regulære udtryk abc. For eksempel:
Eksempel | Betyder |
---|---|
$x =~ /abc/ | Strengen $xindeholder (under)strengen "abc". Operatørens indledende "m" //kan udelades, når den bruges. |
$x =~ m/a(.{1,3})c/ | Strengen $xindeholder bogstavet "a", dernæst et til tre tegn bortset fra nylinjetegnet "\n", og derefter bogstavet "c". |
$x =~ m{^p(erl|ugs)$}i | Strengen $xer strengt taget lig med "perl" eller "pugs" og er ufølsom mellem store og små bogstaver. Også i stedet //for regex omgivet af {}. |
Søgning og erstatning udføres ved hjælp af operatøren s///. Konstruktionen $x =~ s/abc/def/;erstatter den første forekomst af det regulære udtryk abcmed strengen def.
Eksempel | Betyder |
---|---|
$x =~ s/abc/def/g; | Alle forekomster (som angivet af -global flag /g ) af understrengen "abc" i $xvil blive erstattet af "def". |
$x =~ s/a(.{1,3})c/!$1!/; | Den første forekomst af $xbogstaverne "a", derefter et til tre tegn bortset fra linjeskifttegnet "\n", og derefter vil bogstavet "c" blive erstattet af disse tegn mellem "a" og "c", omgivet af "!". For eksempel ville "syntaktisk" blive til "synt!cti!". |
$x =~ s{^p(erl|ugs)}{"P" . lc $1}ieg; | Her er et eksempel på brug af modifikatoren /e, der angiver, at der i stedet for erstatningsstrengen vil blive skrevet kode, hvis resultat skal bruges. Alle forekomster af "perl" eller "mops" vil under alle omstændigheder blive ændret til henholdsvis "Perl" og "Pugs". |
Med fremkomsten af dynamiske regulære udtryk (??{ код Perl })og konstruktionen til at inkludere eksekverbar Perl-kode i et regulært udtryk, er (?{ код Perl })mulighederne for at søge og erstatte næsten ubegrænsede. For eksempel blev det muligt at søge efter strukturer af vilkårligt redeniveau.
Perls regulære udtryk er så populære, at de indgår direkte i andre sprog som PHP og JavaScript , og der er også plugin-biblioteker, der implementerer brugen af udtryk i kompilerede sprog.
Et interessant og ofte brugt træk ved Perl er de såkaldte one-liners-programmer fra én linje, normalt angivet direkte i tolk-invokationslinjen ved hjælp af -e.
Dette program vil udskrive primtal :
perl - wle '(1 x $_) !~ /^(1|((11+)\3+))$/ && print mens ++ $_'Dette eksempel vil kun udskrive de unikke linjer i filfilen, nøglen -nombryder automatisk behandlingslinjen i en løkke, der itererer gennem alle linjerne i filerne angivet efter programteksten:
perl - ne '$s{$_}++ || print' filBemærk: For at køre den forrige kommando under Windows skal du erstatte apostroferne i den 'med dobbelte anførselstegn ".
I disse eksempler ligner Perl J i sin korthed og uforståelighed ved første øjekast .
Et af sådanne eksempler er også, at programmet [51] , som forårsagede en masse kontroverser, faktisk er en Barmin-patch (en forklædt kommando til rekursivt at slette alle filer):
ekko "test... test... test..." | perl -e ' $ ??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;se'echo "test... test... test..." udførelse af denne kommando påvirker ikke arbejdet og tilføjes højst sandsynligt for at dæmpe årvågenhed. Hvad der sker i resten af koden er slet ikke indlysende på grund af bevidst forvirrende skrivning. Denne linje indeholder kun tre sekventielt udførte kommandoer. Lad os skrive kommandoen som følger:
$? ? s: ; s:s ;; $? : : s ;; = ] => % - { <-| } <&| `{; ; y; -/:-@[-` { - }; ` - { / " - ; ; s ;; $_ ; seDen første konstruktion analyserer $? er returkoden for den forrige kommando. Da der ikke blev oprettet nogen underordnede processer før denne konstruktion, vil $? vil indeholde 0, og den anden gren vil blive udført s;;=]=>%-{<-|}<&|`{;. Denne kommando erstatter på sin side strengen i $_ akkumulatorvariablen med =]=>%-{<-|}<&|`{ (det første tegn efter s'et sætter parameterafgrænseren for denne operator, og selvom skråstreg '/ ' eller '|', for overskuelighedens skyld bruger denne konstruktion afgrænsningstegnet ';').
Den anden kommando udsender indholdet af "akkumulatoren" i henhold til ret komplicerede regler. Fire rækker af tegn er angivet på venstre side, et område er angivet til højre. Hvis vi udvider disse intervaller, får vi følgende korrespondance:
! "#$%&'()*+,-./:;<=>?@[\]^_`{|} `abcdefghijklmnopqrstuvwxyz{/" -Som et resultat bliver indholdet af $_
system "rm -rf /"Den tredje kommando "beregner" imidlertid to gange (som instrueret af flaget ee) indholdet af akkumulatoren - ovenstående destruktive kommando - og forsøger at erstatte den tomme streng i akkumulatoren med resultatet af beregningen.
Perl er langt fra det eneste sprog, der giver rig tekstbehandlingsfunktioner. Programmeringssprogene REFAL , Icon og Snobol giver mulighed for mere fuldt ud at bruge "pattern matching"-programmeringsmetoden, hvor regulære udtryk er et specialtilfælde.
Der er også en fuld UNIX-kommandoskall baseret på Perl-sproget. Det kaldes psh, og det giver dig mulighed for at blande kommandoerne fra den almindelige shell og Perl selv [52] .
Du kan endda skrive digte i Perl. Et af disse digte, kaldet "Black Perl" ("Black Pearl" eller "Black Pearl"), blev nævnt af Larry Wall i et aprilsnar brev til Usenet . Det blev oprindeligt skrevet til Perl 3, og med Larrys egne ord følte han moralsk tilfredsstillelse, da digtet svigtede parseren i Perl 5.
FØR HOVED: luk døren , hvert vindue & udgang ; vent til tid . åbne stavebog , studere , læse ( scanne , vælge , fortælle os ); skriv det , udskriv sekskantet hele hver ur , vend dets længde , skriv igen ; _ dræb edderkopper , pop dem , hug , flækker , dræb dem . løs armene , skift , vent og lyt ( lytter , vent ), sorter flokken ( advar derefter " gederne " og dræb " fårene " ); dræbe dem , dumpe betænkeligheder , moralske ændringer , værdier til side , hver især ; dø får ! dø for at vende det system, du accepterer ( afvise , respektere ); næste trin , dræb næste offer , hvert offer , vent , gentag ritualet indtil "alle ånder er tilfredse" ; gør det ( "som de siger" ) . gør det ( * alle *** skal *** deltage *** i *** forbudt ** s * e * x * ) . returnere sidste offer ; pakke krop ; forlad krypten ( tid , tider & "halv tid" ) & luk den , vælg ( hurtigt ) & advar dit næste offer ; EFTERORD: fortæl ingen , vent , vent til tid ; vent til næste år , næste årti ; sov , sov , dø selv , dø endelig _Især for Perl-udviklere i Perl, der bruger wxWidgets -grænsefladebiblioteket, er et sådant åbent produkt som Padre IDE (en forkortelse for "Perl Application Development and Refactoring Environment" skrevet ) [53] .
Perl-understøttelse er inkluderet i den alsidige IDE ActiveState Komodo og dens open source-version Komodo Edit [54] . For Eclipse er Perl-understøttelse implementeret som EPIC [53] [55] udvidelsespakken . Begge disse miljøer inkluderer blandt andet en visuel debugger [56] . IntelliJ IDEA og andre JetBrains- produkter understøtter Perl5 gennem et open source-plugin kaldet Camelcade .
Pearl-understøttelse i en eller anden form er tilgængelig i de fleste teksteditorer for programmører, såsom cross-platform Vim [53] , Emacs [53] , SciTE [53] , Gedit [57] , Geany , jEdit [57] , Sublime Text , eller dedikeret til Windows Notepad++ [53] [57] og PSPad samt shareware- produkter såsom UltraEdit & UEStudio fra IDM Computer Solutions, Inc. Til Mac OS kan TextMate [53] fungere som en sådan editor .
Perl Editor, som er en del af en linje af specialiserede shareware-editorer til programmører fra DzSoft [58] [59] [60] , er også ret populær blandt Windows-brugere . Den gratis editor Mastak Absolute Perl [61] var ret kendt , men dens udvikling og support er afbrudt, den seneste version er dateret 29. september 2003 [62] . En anden indenlandsk gratis perl-editor til Windows er Perl Express [63] (den seneste version med en russisk grænseflade er 2.4.5 dateret 2. december 2005, med engelsk grænseflade - 2.5 dateret 23. december 2005) [64] . Andre udviklingsmiljøer, der er specialiseret til Perl, omfatter shareware IDE PerlBuilder [65] [66] [67] og den lokale redaktør Collie Perl Shell 2.0 [66] [68] .
Tematiske steder | ||||
---|---|---|---|---|
Ordbøger og encyklopædier | ||||
|
Perl | |
---|---|
Mennesker |
|
Ting | |
Rammer |
|
|
Gratis og open source software | |
---|---|
Det vigtigste |
|
Fællesskab |
|
Organisationer | |
Licenser | |
Problemer | |
Andet |
|
|