Perl | |
---|---|
Jazyková třída | programovací jazyk |
Objevil se v | 1987 [3] |
Autor | Larry Wall |
Vývojář | Larry Wall [1] a The Perl Foundation [d] [2] |
Přípona souboru | .pl[4] nebo [4].pm |
Uvolnění | 5.36.0 (28. května 2022 ) |
Typový systém | slabá dynamika |
Byl ovlivněn | C++ , C [1] , sed , AWK , BASIC , Lisp a prostředí UNIX |
ovlivnil | Raku , Ruby , PHP , Groovy , JavaScript |
Licence | Artistic License [d] [5]a GNU General Public License, verze 1.0 nebo novější [d] [6][7] |
webová stránka |
perl.org dev.perl.org/perl5/ |
OS | Linux [8] , macOS [8] , Microsoft Windows [8] , Solaris [8] , AIX [8] a HP-UX [8] |
Mediální soubory na Wikimedia Commons |
Perl je univerzální, na vysoké úrovni interpretovaný dynamický programovací jazyk vytvořený Larrym Wallem , vyškoleným lingvistou . Název jazyka oficiálně znamená Practical Extraction and Report Language („praktický jazyk pro extrakci dat a sestavování zpráv“) [9] a vtipně - jako Pathologically Eclectic Rubbish Lister („patologicky eklektický seznam odpadků“) [9] ; vývojáři jazyka nepovažují jeho název za zkratku [10] . Zpočátku se název skládal z pěti znaků a v této podobě se přesně shodoval s anglickým slovem pearl („perla“). Pak se ale vešlo ve známost, že takový jazyk existuje (viz PEARL ), a písmeno „a“ bylo odstraněno. Symbolem perlského jazyka je velbloud - nepříliš krásné, ale velmi odolné zvíře, schopné dělat těžkou práci.
Hlavním rysem jazyka jsou jeho bohaté možnosti práce s textem, včetně práce s regulárními výrazy zabudovanými v syntaxi. Perl zdědil mnoho vlastností ze skriptovacích jazyků shellu C , AWK a UNIX .
Perl je známý svou obrovskou sbírkou přídavných modulů CPAN (asi 200 000 ), které značně rozšiřují jeho možnosti. Sbírka CPAN se nachází na adrese https://www.cpan.org .
Perl je univerzální programovací jazyk, který byl původně vytvořen pro manipulaci s textem, ale nyní se používá pro širokou škálu úkolů, včetně správy systému , vývoje webu , síťového programování , her, bioinformatiky a vývoje grafického uživatelského rozhraní .
Jazyk lze charakterizovat spíše jako praktický (snadnost použití, účelnost, úplnost) než krásný (elegance, minimalismus) [11] . Hlavními výhodami jazyka jsou podpora různých paradigmat ( procedurální , objektově orientované a funkční styly programování), ovládání paměti (žádný garbage collector), vestavěná podpora pro zpracování textu, stejně jako velká sbírka třetích -party moduly .
Podle Larryho Walla má Perl dvě hesla. První je „ Existuje více než jeden způsob, jak to udělat “, známé také pod zkratkou TMTOWTDI . Druhým sloganem je „ Snadné věci by měly být snadné a těžké věci by měly být možné “.
Obecná struktura Perlu široce sleduje jeho původy k jazyku C. Perl je procedurální povahy s proměnnými , přiřazovacími výrazy , bloky kódu oddělenými složenými závorkami , řídícími strukturami a funkcemi .
Perl si také půjčuje řadu funkcí z unixových shell programovacích jazyků . Všechny proměnné jsou označeny úvodními znaky, které přesně vyjadřují datový typ proměnné v daném kontextu (např. skalární, pole, hash). Důležité je, že tyto znaky umožňují interpolaci proměnných v řetězcích. Perl má mnoho vestavěných funkcí, které poskytují nástroje často používané pro programování shellu, jako je třídění nebo volání systémových služeb.
Perl si půjčuje pole z Lisp , regulární výrazy z AWK a sed a hashe ("asociativní pole") z AWK. Regulární výrazy usnadňují mnoho úloh analýzy, zpracování textu a manipulace s daty.
Perl 5 přidal podporu pro komplexní datové typy, prvotřídní funkce ( uzavírání jako hodnota) a objektový model. Ten zahrnuje odkazy , balíčky, provádění metod z třídy, proměnné s deklarací lexikálního rozsahu a direktivy kompilátoru (například strict). Největším vylepšením představeným v Perlu 5 byla možnost vkládat kód do „balíčků“ ( package ) jako moduly pro opětovné použití. Larry Wall později poznamenal, že „celým účelem modulárního systému Perlu 5 bylo podpořit růst kultury Perlu, nikoli řádky kódu“ [12] .
Všechny verze Perlu provádějí automatické psaní dat a automatickou správu paměti. Interpret zná typ a paměťové požadavky každého programového objektu, přiděluje a uvolňuje paměť počítáním referencí . Překlad jednoho datového typu do jiného – například čísla na řetězec – probíhá automaticky za běhu, nemožné překlady datových typů vedou k fatální chybě.
Práce ve WindowsUživatelé Microsoft Windows obvykle používají distribuce s předem zkompilovanými binárními soubory, jako je ActivePerl nebo Strawberry Perl , protože kompilace Perlu ze zdroje na tomto OS není snadný úkol. Úkol může usnadnit Cygwin .
Larry Wall začal vyvíjet Perl v roce 1987 , když pracoval jako programátor pro Unisys [13] . Verze 1.0 byla vydána a oznámena na diskusní skupině comp.sources.misc 18. prosince 1987 [14] jako „náhrada“ za awk a sed “.
Perl 2 byl vydán v roce 1988 . Hlavní inovací v něm byl přepracovaný motor regulárního výrazu . Perl 3, vydaný v roce 1989, získal schopnost zpracovávat binární datové toky .
Zpočátku byla jedinou dokumentací pro Perl jedna (velmi dlouhá) manuálová stránka. V roce 1991 byl vydán Programming Perl (známý mnoha programátorům jako Camel Book kvůli obrázku na obálce) a stal se de facto jazykovým standardem. Zároveň byla verze jazyka „upgradována“ na 4, ani ne tak, aby naznačovala významné změny, ale aby naznačila, že tato verze jazyka byla zdokumentována knihou.
Perl 4 prošel řadou vydání, které se zastavily na Perlu 4.036 v roce 1993 . V tomto okamžiku Larry Wall opustil Perl 4 a začal pracovat na Perlu 5. Vývoj Perlu 5 začal v roce 1994. Ve stejné době byl vytvořen mailing list perl5-porters pro koordinaci práce na portování Perl 5 na různé platformy. Stále je hlavním fórem pro vývoj, údržbu a portování Perlu 5 [15] .
Perl 5.000 byl vydán 17. října 1994 . [16] Zahrnoval kompletně přepsaný tlumočník a také mnoho nových jazykových funkcí, jako jsou objekty , odkazy , lokální proměnné ( my $var_name) a moduly . Moduly byly obzvláště důležitou součástí, protože poskytovaly mechanismus pro rozšíření jazyka bez úpravy tlumočníka. To umožnilo stabilizaci interpretu, ale také to umožnilo běžným programátorům Perlu přidávat do jazyka nové funkce. Perl 5 je v aktivním vývoji dodnes.
Perl 5.001 byl vydán 13. března 1995. Perl 5.002 byl vydán 29. února 1996 s podporou nového prototypu. To umožnilo autorům modulů vytvářet funkce, které se chovaly stejně jako vestavěné funkce Perlu. Perl 5.003 byl vydán 25. června 1996 a opravil zjištěné bezpečnostní problémy.
Jedna z nejdůležitějších událostí v historii Perlu 5 se stala mimo jazyk samotný a byla důsledkem podpory modulů. 26. října 1995 zahájila svou práci CPAN ( Comprehensive Perl Archive Network ) , která se stala úložištěm modulů Perlu a také zdrojového kódu samotného jazyka. V současné době má CPAN přes 198 600 modulů vytvořených více než 14 000 programátory [17] [18] .
Perl 5.004 byl vydán 15. května 1997 a obsahoval mimo jiné balíček UNIVERSAL, který dal jazyku základní objekt, ze kterého se automaticky odvozovaly všechny třídy. Byla také zahrnuta možnost požádat o verzi modulů. Kromě toho Perl začal podporovat Microsoft Windows, stejně jako řadu dalších operačních systémů.
Perl 5.005 byl vydán 22. června 1998 . Toto vydání zahrnovalo několik vylepšení enginu regulárních výrazů, nové háčky na backend prostřednictvím modulů B::*, operátor citace qr//pro regulární výrazy, velký výběr dalších nových modulů a podporu pro řadu operačních systémů, zejména BeOS .
Perl 5.6 byl vydán 22. března 2000 . Mezi hlavní změny patřila podpora 64bitových systémů, reprezentace řetězce Unicode , podpora velkých souborů (soubory větší než 2 GB ) a klíčové slovo our[19] [20] . Během vývoje Perlu 5.6 bylo učiněno rozhodnutí změnit schéma pojmenování verzí na takové, které se blíží schématu jiných open source projektů. Po verzi 5.005_63 následovala verze 5.5.640; vývojovým verzím měla být podle plánu přidělena lichá čísla, stabilní verze sudá.
V roce 2000 Larry Wall vyzval komunitu, aby aktivně diskutovala o návrzích na další verzi Perlu. Výsledkem této diskuse bylo 361 RFC ( Request for Comments - "request for comments"), které byly použity při vývoji Perlu 6 . V roce 2001 [21] začaly práce na konečném dokumentu shrnujícím návrhy nové generace Perlu. Výsledek nebyl prezentován jako formální dokument, ale jako souhrn všech RFC. Do této doby existoval Perl 6 pouze jako jazykový popis.
Verze 5.8.xPerl 5.8 byl poprvé vydán 18. července 2002 a od té doby obdržel každoroční aktualizaci. Nejnovější verze Perlu 5.8, 5.8.9, byla vydána 14. prosince 2008. Perl 5.8 zlepšil podporu Unicode, přidal novou implementaci I/O, přidal podporu více vláken, zvýšil numerickou přesnost a přidal několik nových modulů [22] .
V roce 2004 byly zahájeny práce na Synopsi – původně koncipované jako série dokumentů shrnujících výše zmíněný závěrečný dokument. Z této sady dokumentů se však postupně stala specifikace Perl 6. V únoru 2005 začal Otrius Tan pracovat na Pugs , interpretu Perl 6 napsaném v Haskell [23] . Toto byl první skutečný pokus udělat Perl 6 realitou. Tento pokus zanikl v roce 2006.
Verze 5.10.x18. prosince 2007, 20. výročí Perlu 1.0, byl vydán Perl 5.10.0. Tato verze obsahovala řadu pozoruhodných inovací, které ji přibližovaly Perlu 6 . Některé z těchto inovací jsou nové příkazy přepínače (pojmenované „given“/„when“), aktualizace regulárních výrazů a „chytrý“ operátor shody „~~“ [24] [25] .
Zhruba v této době začal seriózně vývoj nové implementace Perlu 6, známé jako Rakudo Perl , vyvinuté ve spojení s virtuálním strojem Parrot . Od listopadu 2009 je Rakudo Perl pravidelně každý měsíc aktualizován a je v současnosti nejúplnější implementací Perlu 6 .
Verze 5.11.xVýznamná změna ve vývojovém procesu pro Perl 5 nastala po zavedení Perlu 5.11. Vývojářská komunita přešla na měsíční cyklus vydávání, přičemž datum vydání je plánováno tři měsíce předem.
Verze 5.12.x12. dubna 2010 byl pro veřejnost uvolněn Perl 5.12.0. Mezi významné inovace patří nová podpora syntaxe package NAME VERSION, operátor Yada Yada (používá se k označení zástupného kódu, který dosud nebyl implementován), kompletní řešení problému Y2038 (Y2038), přetěžování operátorů regulárních výrazů, podpora pro DTrace (dynamický trasovací rámec), stejně jako plná podpora standardu Unicode 5.2 [26] . 7. září 2010 byl vydán Perl 5.12.2 a 21. ledna 2011 byl vydán Perl 5.12.3. Tato vydání obsahují aktualizace modulů a také některé změny dokumentace [27] [28] . Verze 5.12.4 byla vydána 20. června 2011. Poslední verze této větve, 5.12.5, byla vydána 10. listopadu 2012.
Verze 5.14.x14. května 2011 byl vydán Perl 5.14. Podpora JSON je zabudována od verze 5.14.2. Nejnovější verze této větve, 5.14.4, byla vydána 10. března 2013.
Verze 5.16.x20. května 2012 byl vydán Perl 5.16. Významnou novinkou je schopnost specifikovat správnou verzi Perlu k emulaci, což uživatelům umožňuje upgradovat Perl, ale ponechat staré skripty, které by jinak byly nekompatibilní s novou verzí, stále fungují [29] . Jádro Perl 5.16 podporuje Unicode 6.1 [29] .
Verze 5.18.x18. května 2013 byl vydán Perl 5.18. Mezi významné inovace patří nové háčky dtrace, lexikální funkce, zvýšení počtu funkcí obsažených v jádře, revize implementace hashů z bezpečnostních důvodů, podpora Unicode 6.2 [30] .
Verze 5.20.x - 5.26.xVerze 5.20 byla vydána 27. května 2014 [31] .
Dne 16. dubna 2015 bylo oznámeno očekávané vydání verze 5.22 [32] , 9. května 2016 byla vydána verze 5.24 [33] .
30. května 2017 byla vydána další stabilní verze číslo 26 [34] .
Verze 5.28.xVerze 5.28.0 byla vydána 22. června 2018 [35] .
Klíčové inovace :
Vrátí "false", protože písmeno "e" je azbuka (více o běhu skriptu [36] )
Experimentální vlastnosti :
Vylepšení výkonu :
Další změny :
Vyšel 20. června 2020 [37] a za 13 měsíců vývoje se změnilo asi 140 tisíc řádků kódu v 880 souborech. Perl 5.32 přechází do dlouhodobé podpory po dobu 5 let nebo déle. Na "Perl and Raku Conference in the Cloud" [38] oznámil Sawyer X. zásadní změnu verze Perlu z 5 na 7 [39] . Očekává se, že Perl 7 bude stejný Perl 5.32 s moderními výchozími nastaveními.
Klíčové inovace:
Některé optimalizace:
Vydáno 20. května 2021 [40] [41] . Perl 5.34.0 představuje přibližně 11 měsíců vývoje od vydání Perlu 5.32.0 a obsahuje přibližně 280 000 řádků změn ve 2100 souborech od 78 autorů. S výjimkou dokumentace, automaticky generovaných souborů a nástrojů pro tvorbu samotného vydání bylo změněno 150 000 řádků v souborech .pm , .t , .c a .h .
Nová funkce:
Někteří pozorovatelé připisují vydání Perlu 5.10 spuštění hnutí Modern Perl [42] [43] . Konkrétně tato fráze popisuje vývojový styl, který zahrnuje použití CPAN, využití nejnovějšího vývoje v jazyce a vyžadující vysoce kvalitní kód [44] .
Na konci roku 2012 a v roce 2013 bylo zahájeno několik projektů na alternativní implementaci Perlu 5: Perl5 v Perl6 (Rakudo Perl tým) [45] , moe (Stephen Little a přátelé) [46] , p2 [47] (Perl11 tým pod Reini Urbanem), stejně jako gperl (goccy) [48] .
Od roku 2000 byla vyvinuta nová (6.) verze jazyka. Na rozdíl od předchozích verzí plánují vývojáři vytvořit dobře definovaný jazykový standard. V současné době existují experimentální kompilátory Perl 6 , ale další diskuse o nových pravidlech pokračuje.
Syntaxe Perlu sdílí mnoho podobností s C , AWK , sed a Bourne shell .
První řádek zdrojového kódu může začínat "#!/Path/to/Perl [-switches]" - který říká systému cestu k interpretu Perl pro spouštění programů na systémech UNIX a jejich spouštění na webovém serveru (viz také: shebang (Unix) ).
Nejjednodušší program " Ahoj, světe!" " jak následuje:
#!/usr/bin/perl print "Ahoj světe!\n" ;buď pro CGI :
#!/usr/bin/perl print "Typ obsahu: text/html\n\n" ; tisknout "Ahoj světe!" ;buď pomocí jednoho z postmoderních webových rámců
použijte Mojolicious::Lite ; get '/' => { text => 'Ahoj světe!' }; aplikace -> start ;nebo pomocí specifikace PSGI
my $app = sub { return [ 200 , [ 'Content-Type' => 'text/plain' ], [ "ahoj, světe\n" ]]; }Přidání do řetězce.
$x = 5 ; $x .= 0 ; tisk $x ; #padesátiA takto si můžete vytisknout číslo googol .
tisk 1 , 0 x 100 ;Základní datové typy: skalární , pole , hashovací tabulka , funkce , ukazatel souboru , záznam v tabulce symbolů . Proměnné různých typů se odlišují znaménkem, které předchází názvu proměnné:
Typ | Symbol | Příklad | Popis |
---|---|---|---|
Skalární | $ | $foo | jediná hodnota; může být číslo, řetězec , odkaz na soubor nebo odkaz . |
pole | @ | @foo | Uspořádaná sbírka skalárů. |
Hash tabulka | % | %foo | Sbírka strunových-skalárních párů; řetězce se nazývají klíče a skaláry se nazývají hodnoty . Synonymem je asociativní pole . |
Popisovač souboru | < > | $foo nebo FOO | Reprezentace otevřeného souboru nebo jiného cíle otevřeného pro čtení a/nebo zápis. |
Funkce | & | &foo | Část kódu, která přebírá argumenty, provádí akce a vrací hodnoty. |
Záznam tabulky symbolů | * | *foo | Záznam tabulky symbolů pro všechny typy s názvem 'foo'. |
Skalární proměnné se používají k ukládání jednotlivých hodnot. Mohou obsahovat čísla, řetězce a odkazy na jiné objekty . Před názvem skalární proměnné musí být znak dolaru '$'. Typ skalární proměnné není fixní (na rozdíl např. od jazyka C ) a je určován dynamicky v závislosti na kontextu. Například,
$x = 10 ; # číslo $y = $x + 1 ; # použijte $x jako číslo... $z = $x . 'řetězec' ; # ... a nyní jako řetězec $ref = \ $x ; # $ref je ukazatel na $x $$ref = 10 ; # $x obsahuje hodnotu 10Data řetězce musí být uzavřena v uvozovkách. Perl používá dva druhy uvozovek, jednoduché a dvojité. Uzavření řetězce do dvojitých uvozovek umožňuje automaticky nahradit názvy proměnných, které se vyskytují, jejich hodnotami. Uzavření řetězců do jednoduchých uvozovek zabrání tomuto chování:
## Příklad interpolace proměnných v uvozovkách $pi = 3,141592654 ; $var1 = 'Hodnota Pi je $pi\n' ; tisk $var1 ; # Hodnota Pi je $pi\n $var2 = "Hodnota Pi je $pi\n" ; tisk $var2 ; # Hodnota Pi je 3,141592654Chcete-li vložit dvojité uvozovky do řetězce, který byl v uvozovkách, použijte \". Chcete-li do řetězce v jednoduchých uvozovkách vložit jednoduché uvozovky, použijte \'. Pro usnadnění práce s řetězci obsahujícími mnoho uvozovek uvnitř vám Perl umožňuje použijte alternativní metody citování Alternativní forma používá libovolnou dvojici znaků umístěnou za písmenem q (napodobuje chování jednoduchých uvozovek) nebo qq (napodobuje chování dvojitých uvozovek):
## Příklad použití alternativních uvozovek $pi = 3,141592654 ; $link1 = q{<a href="http://ru.wikipedia.org/wiki/Pi">$pi</a>} ; tisk $odkaz1 ; # <a href="http://ru.wikipedia.org/wiki/Pi">$pi</a> $link2 = qq{<a href="http://ru.wikipedia.org/wiki/Pi ">$pi</a>} ; tisk $odkaz2 ; # <a href="http://ru.wikipedia.org/wiki/Pi">3.141592654</a>Dalším typem uvozovek v Perlu jsou zpětné uvozovky. Obsahují programy operačního systému, jejichž výstup může být přesměrován do interpretu Perl. Například:
## Příklad použití backticks ke spouštění příkazů UNIX $mezera = `du -s -k /usr/local/bin` ; tisk $mezera ; #6264 /usr/local/bin $sysuptime = `uptime` ; tisk $sysuptime ; # 2:24 až 1 den, 9:05, 1 uživatel, průměrné zatížení: 0,26 0,32 0,33 PolePole je uspořádaný seznam skalárů . Každý prvek pole má pořadový index, pomocí kterého k němu lze přistupovat. Číslování prvků začíná od nuly, to znamená, že první prvek seznamu má index 0. Před název proměnné pole musíte vložit znak '@' a pro přístup ke konkrétnímu prvku pole použijte '$ ', protože jeden prvek pole je skalární. Vícerozměrná pole lze modelovat vložením odkazů na jiné seznamy do seznamu.
@array = ( 1 , 2 , 3 , 4 ); # zapsat čtyři prvky do pole @array print $array [ 2 ]; # print třetí prvek print @array [ 2 , 3 ]; # vytisknout třetí a čtvrtý prvek. # @ je zde použito, protože výsledkem operace dělení pole je také pole. Hash tabulkaHashovací tabulka může být inicializována polem nebo seznamem skládajícím se z neomezeného počtu sekvencí (klíč, hodnota).
%hash = ( kočka => 'kotě' , # zde => je takzvaná "dlouhá čárka", v tomto příkladu pes => 'štěně' , # funkce zcela podobná běžnému "," kromě krávy => 'calf' # že literály vlevo jsou implicitně citovány ); print $hash { 'kočka' }; #Print kitten print join ( "-" , klíče %hash ) ; # Výstup všech klíčů. Tisk spojení kočka-pes-kráva ( "-" , hodnoty %hash ) ; # Zobrazit všechny hodnoty. Tisk spojení tisku kotě-štěně-lýtko ( "-" , %hash ) ; # Vytiskne kočku-kotě-krávu-tele-psa-štěně, protože v kontextu seznamu je hash automaticky # rozšířen na seznam (klíč, hodnota). Vzhledem k tomu, že klíče v hash nejsou seřazeny, bude pokaždé vydáno # párů v náhodném pořadí. FunkcePoužívání:
$s = readline * STDIN ; #Přečtěte jeden řádek ze STDIN (standardní vstupní proud); skalární kontext. @values = <SOUBOR> ; #Čtení všech řádků z nějakého otevřeného souboru a přidruženého k deskriptoru FILE; kontext seznamu. tisk STDOUT $s ; #Print to STDOUT (standardní výstupní stream)Přesnější příklad, kdy se typeglob používá k předání deskriptoru souboru funkci:
můj $soubor = 'soubor.txt' ; #název souboru ke čtení otevřít FH , $soubor ; #open file my $text = _parseFile ( * FH ); #předat deskriptor souboru funkci tisku $text ; zavřít RD ; # nezapomeňte zavřít deskriptor souboru sub _parseFile { my $fh = shift ; #get deskriptor souboru my $text = join ( '' , <$fh> ); #přečtěte řádek po řádku z deskriptoru souboru do řetězce a vložte do proměnné $text return $text ; }Nedávné verze Perlu zavedly možnost ukládat deskriptory souborů ve skalárech a novější programy tuto metodu raději používají.
Tabulky symbolů se také používají k přiřazení dvou názvů proměnných k jedné hodnotě v paměti, čímž se vytvářejí synonyma, která lze použít k přístupu a úpravě hodnoty stejně jako k původnímu názvu. Tato schopnost je základem perlského systému načítatelných modulů, tříd a objektů .
Objekt v Perlu je jednoduše odkaz spojený s konkrétní třídou (balíčkem). Pro komunikaci se používá funkce požehnání. Rutiny takového propojeného balíčku jsou metody a obdrží odkaz jako první argument.
Pro konstruktory neexistuje žádná speciální syntaxe, používá se rutina balíčku, která vrací odkaz spojený s tímto balíčkem.
Existuje také mnoho rozšíření systému OOP, které umožňují měnit syntaxi a používat syntaktický cukr, mezi nimiž stojí za zmínku modul Moose cpan a jeho odlehčená verze Moo [49] . Moose využívá mnoho projektů a velkých společností jako BBC nebo Cisco [50] .
Regulární výrazy jsou důležitou součástí Perlu . Díky tomu je Perl vhodný pro zpracování textu. Většina práce s regulárními výrazy se provádí pomocí =~operátorů m//a s///.
Operátor m//se používá k testování shody. V nejjednodušším případě bude výsledek výrazu $x =~ m/abc/pravdivý tehdy a pouze tehdy, když se řetězec $xshoduje s regulárním výrazem abc. Například:
Příklad | Význam |
---|---|
$x =~ /abc/ | Řetězec $xobsahuje (pod)řetězec "abc". Počáteční "m" operátoru //může být při použití vynecháno. |
$x =~ m/a(.{1,3})c/ | Řetězec $xobsahuje písmeno "a", potom libovolný jeden až tři znaky kromě znaku nového řádku "\n" a poté písmeno "c". |
$x =~ m{^p(erl|ugs)$}i | Řetězec $xse přesně rovná "perl" nebo "pugs" a nerozlišuje malá a velká písmena. Také místo //regulárního výrazu obklopeného {}. |
Vyhledávání a nahrazování se provádí pomocí operátoru s///. Konstrukce $x =~ s/abc/def/;nahradí první výskyt regulárního výrazu abcřetězcem def.
Příklad | Význam |
---|---|
$x =~ s/abc/def/g; | Všechny výskyty (jak je označeno příznakem -global /g ) podřetězce "abc" v $xbudou nahrazeny "def". |
$x =~ s/a(.{1,3})c/!$1!/; | První výskyt $xpísmen „a“, poté libovolný jeden až tři znaky jiné než znak nového řádku „\n“ a poté písmeno „c“ bude nahrazeno znaky mezi „a“ a „c“ obklopenými "!". Například „syntaktický“ by se stal „synt!cti!“. |
$x =~ s{^p(erl|ugs)}{"P" . lc $1}ieg; | Zde je příklad použití modifikátoru /e, který označuje, že místo náhradního řetězce bude zapsán kód, jehož výsledek by měl být použit. Všechny výskyty „perl“ nebo „pugs“ budou v každém případě změněny na „Perl“ a „Pugs“. |
S příchodem dynamických regulárních výrazů (??{ код Perl })a konstrukce pro zahrnutí spustitelného kódu Perl do regulárního výrazu jsou (?{ код Perl })možnosti vyhledávání a nahrazování téměř neomezené. Například bylo možné vyhledávat struktury libovolné úrovně vnoření.
Regulární výrazy Perlu jsou tak populární, že jsou zahrnuty přímo v jiných jazycích, jako je PHP a JavaScript , a existují také knihovny pluginů, které implementují použití výrazů v kompilovaných jazycích.
Zajímavou a často používanou funkcí Perlu jsou tzv. one-linery - programy z jednoho řádku, obvykle specifikované přímo v řádku vyvolání interpretu pomocí -e.
Tento program vytiskne prvočísla :
perl - wle '(1 x $_) !~ /^(1|((11+)\3+))$/ && tisknout while ++ $_'Tento příklad vytiskne pouze jedinečné řádky souboru souboru, klíč -nautomaticky zabalí řádek zpracování do smyčky, která iteruje všechny řádky v souborech zadaných za textem programu:
perl - ne '$s{$_}++ || tisk' souborPoznámka: Chcete-li spustit předchozí příkaz v systému Windows, nahraďte apostrofy v něm 'dvojitými uvozovkami ".
V těchto příkladech se Perl podobá na první pohled J svou stručností a nesrozumitelností .
Jedním z takových příkladů je také program [51] , který způsobil mnoho kontroverzí, je ve skutečnosti záplata Barmin (skrytý příkaz pro rekurzivní smazání všech souborů):
echo "test... test... test..." | perl -e ' $ ??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;viz'echo "test... test... test..." provedení tohoto příkazu neovlivňuje práci a je pravděpodobně přidáno k uklidnění bdělosti. Co se děje ve zbytku kódu, není kvůli záměrně matoucímu psaní vůbec zřejmé. Tento řádek obsahuje pouze tři postupně prováděné příkazy. Zapišme příkaz takto:
$? ? s: ; s:s ;; $? : : s ;; = ] => % - { <-| } <&| `{; ; y; -/:-@[-` { - }; ` - { / " - ; ; s ;; $_ ; vizPrvní konstrukt analyzuje $? je návratový kód předchozího příkazu. Protože před tímto konstruktem nebyly vytvořeny žádné podřízené procesy, $? bude obsahovat 0 a druhá větev bude provedena s;;=]=>%-{<-|}<&|`{;. Tento příkaz zase nahradí řetězec v proměnné $_ accumulator za =]=>%-{<-|}<&|`{ (první znak za s nastavuje oddělovač parametru pro tento operátor, a přestože lomítko '/ ' nebo '|', z důvodu jasnosti tento konstrukt používá oddělovač ';').
Druhý příkaz vysílá obsah „akumulátoru“ podle poměrně komplikovaných pravidel. Čtyři rozsahy znaků jsou uvedeny na levé straně, jeden rozsah je označen vpravo. Pokud tyto rozsahy rozšíříme, dostaneme následující shodu:
! "#$%&'()*+,-./:;<=>?@[\]^_`{|} `abcdefghijklmnopqrstuvwxyz{/" -V důsledku toho se obsah $_ stává
systém "rm -rf /"Třetí příkaz však dvakrát (podle pokynu příznaku ee) "vypočítá" obsah akumulátoru - výše uvedený destruktivní příkaz - a pokusí se nahradit prázdný řetězec v akumulátoru výsledkem výpočtu.
Perl není zdaleka jediný jazyk, který poskytuje možnosti zpracování bohatého textu. Programovací jazyky REFAL , Icon a Snobol poskytují příležitost plně využít programovací metodu „pattern matching“, jejíž speciálním případem jsou regulární výrazy.
K dispozici je také plný příkazový shell UNIX založený na jazyce Perl. Jmenuje se psh a umožňuje kombinovat příkazy běžného shellu a samotného Perlu [52] .
Můžete dokonce psát básně v Perlu. Jednu z těchto básní, nazvanou „Black Perl“ („Černá perla“ nebo „Černá perla“), zmínil Larry Wall v aprílovém dopise Usenetu . Původně byla napsána pro Perl 3 a Larry podle vlastních slov cítil morální zadostiučinění, když báseň selhala v analyzátoru v Perlu 5.
PŘED: zavřete dveře , každé okno a výstup ; počkejte na čas . otevřít knihu kouzel , studovat , číst ( skenovat , vybrat , říct nám ); napište to , vytiskněte celé hex každé hodinky , obraťte jeho délku , napište znovu ; _ zabíjejte pavouky , rozsekejte je , sekejte , rozdělte je , zabíjejte je . odpojit zbraně , posouvat , čekat a poslouchat ( poslechnout , počkat ), roztřídit stádo ( pak varovat „ kozy “ a zabít „ ovce “ ); zabít je , zbavit se výčitek , morálních posunů , hodnot stranou , každého ; zemřít ovce ! zemřít , abyste zvrátili systém , který přijímáte ( odmítnout , respektovat ); další krok , zabít další oběť , každou oběť , počkat , opakovat rituál , dokud "všichni duchové nebudou spokojeni" ; udělejte to ( „jak se říká“ ) . udělej to ( * každý *** se musí *** zúčastnit *** v *** zakázaném ** s * e * x * ) . vrátit poslední oběť ; tělo balíku ; opusťte kryptu ( čas , časy & "půl času" ) a zavřete ji , vyberte ( rychle ) a varujte svou další oběť ; NÁSLEDUJÍCÍ SLOVA: nikomu neříkej , počkej , počkej až čas ; počkejte do příštího roku , příštího desetiletí ; spi , spi , zemři sám , zemři konečně _Speciálně pro vývojáře Perlu v Perlu, kteří používají knihovnu rozhraní wxWidgets , je napsán takový otevřený produkt jako Padre IDE (zkratka pro "Perl Application Development and Refactoring Environment" ) [53] .
Podpora jazyka Perl je zahrnuta ve všestranném IDE ActiveState Komodo a jeho open source verzi Komodo Edit [54] . Pro Eclipse je podpora Perlu implementována jako rozšiřující balíček EPIC [53] [55] . Obě tato prostředí obsahují mimo jiné vizuální debugger [56] . IntelliJ IDEA a další produkty JetBrains podporují Perl5 prostřednictvím open source pluginu s názvem Camelcade .
Pearl podpora v té či oné podobě je dostupná ve většině textových editorů pro programátory, jako je multiplatformní Vim [53] , Emacs [53] , SciTE [53] , Gedit [57] , Geany , jEdit [57] , Sublime Text nebo vyhrazené pro Windows Notepad++ [53] [57] a PSPad a také sharewarové produkty, jako je UltraEdit & UEStudio od IDM Computer Solutions, Inc. Pro Mac OS může jako takový editor sloužit TextMate [53] .
Mezi uživateli Windows je také poměrně oblíbený Perl Editor, který je součástí řady specializovaných sharewarových editorů pro programátory od DzSoft [58] [59] [60] . Bezplatný editor Mastak Absolute Perl [61] byl poměrně dobře známý , ale jeho vývoj a podpora byla ukončena, poslední verze je datována 29. září 2003 [62] . Dalším domácím bezplatným editorem perlu pro Windows je Perl Express [63] (poslední verze s ruským rozhraním je 2.4.5 z 2. prosince 2005, s anglickým rozhraním - 2.5 z 23. prosince 2005) [64] . Mezi další vývojová prostředí specializovaná na Perl patří sharewarové IDE PerlBuilder [65] [66] [67] a lokální editor Collie Perl Shell 2.0 [66] [68] .
Tematické stránky | ||||
---|---|---|---|---|
Slovníky a encyklopedie | ||||
|
Perl | |
---|---|
Lidé |
|
Věci | |
Rámce |
|
|
Bezplatný open source software | |
---|---|
Hlavní věc |
|
Společenství |
|
Organizace | |
licence | |
Problémy | |
jiný |
|
|