Perl | |
---|---|
Nyelvóra | programozási nyelv |
Megjelent | 1987 [3] |
Szerző | Larry Wall |
Fejlesztő | Larry Wall [1] és a Perl Alapítvány [d] [2] |
Fájlkiterjesztés _ | .pl[4] vagy [4].pm |
Kiadás | 5.36.0 (2022. május 28. ) |
Típusrendszer | gyenge dinamika |
Befolyásolva | C++ , C [1] , sed , AWK , BASIC , Lisp és a UNIX shell |
befolyásolta | Raku , Ruby , PHP , Groovy , JavaScript |
Engedély | Művészi licenc [d] [5]és GNU General Public License, 1.0 vagy újabb verzió [d] [6][7] |
Weboldal |
perl.org dev.perl.org/perl5/ |
OS | Linux [8] , macOS [8] , Microsoft Windows [8] , Solaris [8] , AIX [8] és HP-UX [8] |
Médiafájlok a Wikimedia Commons oldalon |
A Perl egy általános célú, magas szinten értelmezett dinamikus programozási nyelv , amelyet Larry Wall , nyelvész végzettséggel készített. A nyelv neve hivatalosan a Practical Extraction and Report Language ("praktikus nyelv az adatok kinyerésére és a jelentések összeállítására") [9] rövidítése, tréfásan pedig - Pathologically Eclectic Rubbish Lister ("pathologically eklektikus szemétlista") [9] ; a nyelvfejlesztők nem tekintik a nevét mozaikszónak [10] . Kezdetben a név öt karakterből állt, és ebben a formában pontosan egybeesett az angol gyöngy ("gyöngy") szóval. De aztán kiderült, hogy létezik ilyen nyelv (lásd PEARL ), és az "a" betűt eltávolították. A perl nyelv szimbóluma a teve - nem túl szép, de nagyon szívós állat, kemény munkára képes.
A nyelv fő jellemzője a szöveggel való munkavégzés gazdag lehetőségei, beleértve a szintaxisba épített reguláris kifejezésekkel való munkát is. A Perl számos tulajdonságot örökölt C , AWK , UNIX shell szkriptnyelvekből .
A Perl a CPAN kiegészítő moduljainak hatalmas gyűjteményéről híres (körülbelül 200 000 ), amelyek nagyban növelik a képességeit. A CPAN gyűjtemény a https://www.cpan.org címen található .
A Perl egy általános célú programozási nyelv, amelyet eredetileg szövegmanipulációra hoztak létre, de mára számos feladatra használják, beleértve a rendszeradminisztrációt , webfejlesztést , hálózati programozást , játékokat, bioinformatikát és grafikus felhasználói felület fejlesztését .
A nyelvet inkább praktikusnak (könnyű használhatóság, hatékonyság, teljesség), semmint szépnek (elegancia, minimalizmus) jellemezhetjük [11] . A nyelv fő előnyei a különböző paradigmák támogatása ( eljárási , objektumorientált és funkcionális programozási stílusok), memóriavezérlés (nincs hurok alapú szemétgyűjtő), beépített támogatás a szövegfeldolgozáshoz, valamint a harmadik -parti modulok .
Larry Wall szerint a Perlnek két mottója van. Az első a „ Több, mint egy mód van rá ”, amely a TMTOWTDI betűszóval is ismert . A második szlogen: „A könnyű dolgoknak könnyűnek kell lenniük, a nehéz dolgoknak pedig lehetségeseknek kell lenniük ”.
A Perl általános szerkezete nagyjából a C nyelvre vezethető vissza . A Perl eljárási jellegű, változókat , hozzárendelési kifejezéseket , kapcsos zárójelekkel elválasztott kódblokkokat , vezérlőstruktúrákat és függvényeket tartalmaz .
A Perl számos szolgáltatást kölcsönzött a UNIX shell programozási nyelvekből is . Minden változót bevezető karakterekkel jelölnek, amelyek pontosan kifejezik a változó adattípusát az adott kontextusban (pl. skalár, tömb, hash). Fontos, hogy ezek a jelek lehetővé teszik a változók karakterláncokba történő interpolálását. A Perl számos beépített funkcióval rendelkezik, amelyek gyakran shell-programozáshoz, például rendszerszolgáltatások rendezéséhez vagy hívásához használt eszközöket biztosítanak.
A Perl tömböket a Lisp -ből , a reguláris kifejezéseket az AWK -ból és a sed -ből, a hash -eket ("asszociatív tömbök") pedig az AWK-ból kölcsönzi. A reguláris kifejezések számos elemzési, szövegfeldolgozási és adatkezelési feladatot megkönnyítenek.
A Perl 5 támogatja az összetett adattípusokat, az első osztályú függvényeket ( értékként zárva ) és egy objektummodellt. Ez utóbbi tartalmaz hivatkozásokat , csomagokat, metódusok végrehajtását egy osztályból, változókat lexikális hatókör deklarációval és fordítói direktívákatstrict (például ). A Perl 5-ben bevezetett legnagyobb fejlesztés az volt, hogy a kódot "csomagokba" ( csomagokba ) helyezték modulként az újrafelhasználáshoz. Larry Wall később megjegyezte, hogy "A Perl 5 moduláris rendszerének célja a Perl kultúra növekedésének ösztönzése volt, nem a kódsorok" [12] .
A Perl minden verziója képes automatikus adatbevitelre és automatikus memóriakezelésre. Az értelmező ismeri az egyes programobjektumok típusát és memóriaigényét, referenciaszámlálással lefoglalja és felszabadítja a memóriát . Az egyik adattípus másikra fordítása - például egy szám karakterláncra - automatikusan megtörténik futás közben, a lehetetlen adattípus-fordítások végzetes hibához vezetnek.
Dolgozzon Windows alattA Microsoft Windows-felhasználók általában előre lefordított binárisokat tartalmazó disztribúciókat használnak, mint például az ActivePerl vagy a Strawberry Perl , mivel a Perl forrásból való fordítása ezen az operációs rendszeren nem egyszerű feladat. A feladatot Cygwin könnyítheti meg .
Larry Wall 1987 -ben kezdte el fejleszteni a Perlt, miközben programozóként dolgozott az Unisysnél [13] . Az 1.0-s verziót 1987. december 18-án jelentették be, és a comp.sources.misc hírcsoportban [14] "az awk és a sed helyettesítőjeként" jelentették be .
A Perl 2 1988 -ban jelent meg . A fő újítás az újratervezett reguláris kifejezés motor volt . Az 1989-ben megjelent Perl 3 képessé vált a bináris adatfolyamok feldolgozására .
Kezdetben a Perl egyetlen dokumentációja egyetlen (nagy terjedelmű) kézikönyv volt . 1991-ben megjelent a Programming Perl (amelyet sok programozó Camel Book néven ismer a borítókép miatt) , és ez lett a de facto nyelvi szabvány. Ezzel egyidejűleg a nyelv verzióját 4-re „frissítették”, nem annyira azért, hogy jelentős változásokat jelezzenek, hanem azért, hogy jelezzék, hogy a nyelvnek ezt a változatát dokumentálta a könyv.
A Perl 4 egy sor kiadáson ment keresztül, 1993 -ban megállva a Perl 4.036-nál . Ekkor Larry Wall elhagyta a Perl 4-et, és elkezdett dolgozni a Perl 5-ön. A Perl 5 fejlesztése 1994-ben kezdődött. Ezzel egy időben létrehozták a perl5-porters levelezőlistát , hogy koordinálják a Perl 5 különböző platformokra történő portolását . Még mindig ez a fő fóruma a Perl 5 fejlesztésének, karbantartásának és portolásának [15] .
A Perl 5.000 1994. október 17-én jelent meg . [16] Tartalmazott egy teljesen átírt értelmezőt , valamint számos új nyelvi funkciót , mint például objektumokat , hivatkozásokat , helyi változókat ( my $var_name) és modulokat . A modulok különösen fontos részét képezték, mivel a tolmács módosítása nélkül biztosították a nyelv kiterjesztését. Ez lehetővé tette a tolmács stabilizálódását, de lehetővé tette a hagyományos Perl-programozók számára is, hogy új funkciókat adjanak a nyelvhez. A Perl 5 a mai napig aktív fejlesztés alatt áll.
A Perl 5.001 1995. március 13-án jelent meg. A Perl 5.002 1996. február 29-én jelent meg új prototípus támogatással. Ez lehetővé tette a modulkészítők számára, hogy olyan függvényeket hozzanak létre, amelyek a Perl beépített függvényeihez hasonlóan viselkedtek. A Perl 5.003 1996. június 25-én jelent meg, és javította a feltárt biztonsági problémákat.
A Perl 5 történetének egyik legfontosabb eseménye magán a nyelven kívül történt, és a modul támogatásának a következménye. 1995. október 26-án kezdte meg munkáját a CPAN ( Comrehensive Perl Archive Network ) , amely a Perl modulok tárháza lett , valamint magának a nyelvnek a forráskódja. Jelenleg a CPAN több mint 198 600 modullal rendelkezik, amelyeket több mint 14 000 programozó készített [17] [18] .
A Perl 5.004 1997. május 15-én jelent meg, és tartalmazta többek között az UNIVERZÁLIS csomagot, amely egy alapobjektumot adott a nyelvnek, amelyből minden osztály automatikusan származott. A modulok verziószámának kérésére is lehetőség van. Ezen kívül a Perl elkezdte támogatni a Microsoft Windows-t, valamint számos más operációs rendszert.
A Perl 5.005 1998. június 22-én jelent meg . Ez a kiadás számos fejlesztést tartalmazott a regex motoron, új hookokat a háttérrendszerhez modulokon keresztül B::*, egy idézet operátort qr//a reguláris kifejezésekhez, számos más új modult, valamint számos operációs rendszer támogatását, különösen a BeOS -t .
A Perl 5.6 2000. március 22-én jelent meg . A főbb változtatások közé tartozott a 64 bites rendszerek támogatása, az Unicode karakterlánc-ábrázolás , a nagy fájlok támogatása ( 2 GB -nál nagyobb fájlok), valamint a our[19] [20] kulcsszó . A Perl 5.6 fejlesztése során döntés született arról, hogy a verzióelnevezési sémát a többi nyílt forráskódú projekthez közelebb állították. Az 5.005_63-as verziót az 5.5.640-es verzió követte; a terv szerint a fejlesztési változatokhoz páratlan, a stabil változatokhoz páros számokat kellett rendelni.
2000-ben Larry Wall felhívást intézett a közösséghez, hogy aktívan vitassák meg a Perl következő verziójára vonatkozó javaslatokat. Ennek a megbeszélésnek az eredménye 361 RFC ( Request for Comments - "request for comments") lett, amelyeket a Perl 6 fejlesztése során használtak . 2001-ben [21] megkezdődött a munka egy végleges dokumentumon, amely összefoglalja a Perl új generációjára vonatkozó javaslatokat. Az eredményt nem hivatalos dokumentumként mutatták be, hanem az összes RFC összefoglalójaként. Ekkorra a Perl 6 már csak nyelvleírásként létezett.
5.8.x verzióA Perl 5.8 először 2002. július 18-án jelent meg, és azóta évente frissítést kapott. A Perl 5.8, 5.8.9 legújabb verziója 2008. december 14-én jelent meg. A Perl 5.8 javította a Unicode támogatást, új I/O implementációt, többszálú támogatást, nagyobb numerikus pontosságot és több új modult is hozzáadott [22] .
2004-ben megkezdődtek a Szinopszis munkálatai – eredetileg a fent említett záródokumentumot összefoglaló dokumentumok sorozataként. Ez a dokumentumkészlet azonban fokozatosan a Perl 6 specifikációjává vált.2005 februárjában Otrius Tan elkezdett dolgozni a Pugs , a Haskellben írt Perl 6 értelmezőn [23] . Ez volt az első igazi kísérlet a Perl 6 valóra váltására. Ez a kísérlet 2006-ban elhalt.
5.10.x verzió2007. december 18-án, a Perl 1.0, Perl 5.10.0 megjelenésének 20. évfordulóján jelent meg. Ez a verzió számos figyelemre méltó újítást tartalmazott, amelyek közelebb hozták a Perl 6 -hoz . Néhány ilyen újítás az új switch utasítások ("adva"/"when" néven), a reguláris kifejezések frissítései és a "~~" "okos" egyezési operátor [24] [25] .
Ez idő tájt a Perl 6 új implementációjának, a Rakudo Perl néven ismert fejlesztése komolyan megkezdődött, és amelyet a Parrot virtuális géppel együtt fejlesztettek ki . 2009 novembere óta a Rakudo Perl-t rendszeresen havonta frissítik, és jelenleg a Perl 6 legteljesebb megvalósítása .
5.11.x verzióA Perl 5 fejlesztési folyamatában jelentős változás történt a Perl 5.11 bevezetése után. A fejlesztői közösség havi kiadási ciklusra tért át, a megjelenési dátumot három hónappal előre tervezték.
5.12.x verzió2010. április 12-én megjelent a Perl 5.12.0 a nyilvánosság számára. A figyelemre méltó újítások közé tartozik az új szintaxis támogatás package NAME VERSION, a Yada Yada operátor (a még nem implementált helyőrző kód megjelölésére szolgál), az Y2038 probléma teljes megoldása (Y2038), a reguláris kifejezés operátorok túlterhelése, a DTrace támogatása (dinamikus nyomkövetési keretrendszer), valamint a Unicode 5.2 szabvány teljes körű támogatása [26] . 2010. szeptember 7-én jelent meg a Perl 5.12.2 , 2011. január 21- én pedig a Perl 5.12.3. Ezek a kiadások modulfrissítéseket, valamint néhány dokumentáció-módosítást tartalmaznak [27] [28] . Az 5.12.4-es verzió 2011. június 20-án jelent meg . Ennek az ágnak a legújabb verziója, az 5.12.5-ös verzió 2012. november 10-én jelent meg .
5.14.x verzió2011. május 14- én megjelent a Perl 5.14. A JSON - támogatás az 5.14.2-es verzió óta be van építve. Ennek az ágnak a legújabb, 5.14.4-es verziója 2013. március 10- én jelent meg.
5.16.x verzió2012. május 20- án megjelent a Perl 5.16. Jelentős újdonság az a lehetőség, hogy megadható a Perl megfelelő verziója az emulációhoz, ami lehetővé teszi a felhasználók számára, hogy frissítsék a Perl-t, de továbbra is működjenek a régi szkriptek, amelyek egyébként nem lennének kompatibilisek az új verzióval [29] . A Perl 5.16 mag támogatja az Unicode 6.1-et [29] .
5.18.x verzió2013. május 18- án megjelent a Perl 5.18. A jelentős újítások közé tartoznak az új dtrace hookok, a lexikális függvények, a kernelben szereplő függvények számának növekedése, a hashek megvalósításának biztonsági okokból történő átdolgozása, a Unicode 6.2 támogatása [30] .
5.20.x - 5.26.x verziókAz 5.20-as verzió 2014. május 27- én jelent meg [31] .
2015. április 16-án jelentették be az 5.22 [32] verzió várható megjelenését , 2016. május 9-én pedig az 5.24 [33] verzió jelent meg .
2017. május 30- án jelent meg a következő stabil verzió 26 [34] .
5.28.x verzióAz 5.28.0-s verzió 2018. június 22-én jelent meg [35] .
Főbb újítások :
„hamis”-t ad vissza, mert az "e" betű cirill (bővebben a szkript futtatásáról [36] )
Kísérleti jellemzők :
Teljesítményfejlesztések :
Egyéb változtatások :
2020. június 20-án adták ki [37] , és 13 hónapos fejlesztés alatt 880 fájlban körülbelül 140 ezer kódsort módosítottak. A Perl 5.32 hosszú távú támogatást nyújt, legalább 5 évre. A "Perl és Raku konferencián a felhőben" [38] Sawyer X. bejelentette a Perl jelentős verziójának 5-ről 7-re történő megváltoztatását [39] . A Perl 7 várhatóan ugyanaz a Perl 5.32 lesz, modern alapértelmezésekkel.
Főbb újítások:
Néhány optimalizálás:
Megjelenés : 2021. május 20. [40] [41] . A Perl 5.34.0 körülbelül 11 hónapnyi fejlesztést jelent a Perl 5.32.0 megjelenése óta, és körülbelül 280 000 sornyi változtatást tartalmaz 78 szerző 2100 fájljában. A dokumentációt, az automatikusan generált fájlokat és magának a kiadásnak az elkészítéséhez szükséges eszközöket leszámítva 150 000 sor módosult az 1300 .pm , .t , .c és .h fájlokban.
Új funkció:
Egyes megfigyelők a Perl 5.10 kiadásának tulajdonítják a Modern Perl mozgalom elindítását [42] [43] . Ez a kifejezés különösen azt a fejlesztési stílust írja le, amely magában foglalja a CPAN használatát, a nyelv legújabb fejlesztéseinek kihasználását és magas színvonalú kód igényét [44] .
2012 végén és 2013-ban számos projekt indult a Perl 5 egy alternatív megvalósításával kapcsolatban: Perl5 in Perl6 (Rakudo Perl csapat) [45] , moe (Stephen Little és barátai) [46] , p2 [47] (Perl11 csapat Reini Urban vezetése alatt), valamint a gperl (goccy) [48] .
2000 óta a nyelv új (6.) változatát fejlesztették ki. A korábbi verziókkal ellentétben a fejlesztők egy jól definiált nyelvi szabvány létrehozását tervezik. Jelenleg léteznek kísérleti Perl 6 fordítók , de az új szabályok további tárgyalása folytatódik.
A Perl szintaxisa sok hasonlóságot mutat a C , AWK , sed és a Bourne shell szintaxisával .
A forráskód első sora kezdődhet a "#!/Path/to/Perl [-switches]" karakterlánccal – ami megmondja a rendszernek a Perl értelmező elérési útját UNIX rendszereken és webszerveren történő programok végrehajtásához (lásd: még: shebang (Unix) ).
A legegyszerűbb program " Helló, világ!" " alábbiak szerint:
#!/usr/bin/perl print "Hello, world!\n" ;vagy CGI esetén :
#!/usr/bin/perl print "Content-type: text/html\n\n" ; print "Hello world!" ;vagy valamelyik posztmodern web-keretet használva
használd a Mojolicious::Lite ; get '/' => { text => 'Hello World!' }; app -> start ;vagy a PSGI specifikáció használatával
my $app = sub { return [ 200 , [ 'Content-Type' => 'text/plain' ], [ "hello, world\n" ]]; }Hozzáadás egy karakterlánchoz.
$x = 5 ; $x .= 0 ; nyomtatás $x ; #ötvenÉs így nyomtathatja ki a googol számot .
nyomtatás 1 , 0 x 100 ;Alapvető adattípusok: skalár , tömb , hash tábla , függvény , fájlmutató , szimbólumtábla bejegyzés . A különböző típusú változókat a változó neve előtti jel különbözteti meg:
Típusú | Szimbólum | Példa | Leírás |
---|---|---|---|
Skalár | $ | $foo | egyetlen érték; lehet szám, karakterlánc , fájlhivatkozás vagy hivatkozás . |
sor | @ | @foo | A skalárok rendezett gyűjteménye. |
Hash táblázat | % | %foo | Húr-skalár párok gyűjteménye; a karakterláncokat kulcsoknak , a skalárokat pedig értékeknek nevezzük . A szinonimája egy asszociatív tömb . |
Fájlleíró | < > | $foo vagy FOO | Nyitott fájl vagy egyéb olvasásra és/vagy írásra nyitva álló cél ábrázolása. |
Funkció | & | &foo | Olyan kódrészlet, amely argumentumokat vesz fel, műveleteket hajt végre és értékeket ad vissza. |
Szimbólumtábla bejegyzés | * | *foo | Szimbólumtábla bejegyzés az összes „foo” nevű típushoz. |
A skaláris változók egyedi értékek tárolására szolgálnak. Tartalmazhatnak számokat, karakterláncokat és hivatkozásokat más objektumokra . A skaláris változó neve előtt egy dollárjelnek „$” kell lennie. A skaláris változó típusa nem rögzített (ellentétben például a C nyelvvel ), és a kontextustól függően dinamikusan határozza meg. Például,
$x = 10 ; # $y szám = $x + 1 ; # használja a $x-et számként... $z = $x . 'string' ; # ... és most stringként $ref = \ $x ; # $ref egy mutató a következőre: $x $$ref = 10 ; # $x a 10-es értéket tartalmazzaA karakterlánc-adatokat idézőjelek közé kell tenni. A Perl kétféle idézőjelet használ: szimpla és dupla idézőjeleket. Ha egy karakterláncot idézőjelbe tesz, akkor az előforduló változóneveket automatikusan lecserélheti azok értékére. A karakterláncok idézőjelekbe zárása megakadályozza ezt a viselkedést:
## Példa a változók idézőjelben történő interpolálására $pi = 3,141592654 ; $var1 = 'Pi értéke $pi\n' ; nyomtatás $var1 ; # Pi értéke $pi\n $var2 = "Pi értéke $pi\n" ; nyomtatás $var2 ; # Pi értéke 3,141592654Ha dupla idézőjeleket szeretne beilleszteni egy dupla idézőjeles karakterláncba, használja a \ jelet. Ha egy idézőjeles karakterláncba egyszeres idézőjeleket szeretne beilleszteni, használja a \' karakterláncot. A sok idézőjel karaktert tartalmazó karakterláncokkal való munka megkönnyítése érdekében a Perl lehetővé teszi, hogy használjon alternatív idézési módszereket Az alternatív forma bármilyen karakterpárt használ, amely a q (az idézőjelek viselkedését utánozza) vagy a qq (utánozza a kettős idézőjelek viselkedését) utáni karakterpárt:
## Példa alternatív idézőjelek használatára $pi = 3,141592654 ; $link1 = q{<a href="http://en.wikipedia.org/wiki/Pi">$pi</a>} ; nyomtatás $link1 ; # <a href="http://ru.wikipedia.org/wiki/Pi">$pi</a> $link2 = qq{<a href="http://ru.wikipedia.org/wiki/Pi ">$pi</a>} ; nyomtatás $link2 ; # <a href="http://ru.wikipedia.org/wiki/Pi">3.141592654</a>Egy másik típusú idézet a Perlben a vissza idézőjel. Olyan operációs rendszer programokat tartalmaznak, amelyek kimenete a Perl értelmezőhöz továbbítható. Például:
## Példa a backtick használatára UNIX-parancsok végrehajtására $space = `du -s -k /usr/local/bin` ; nyomtatás $space ; #6264 /usr/local/bin $sysuptime = `üzemidő` ; nyomtatás $rendszerüzemidő ; # 2:24 fel 1 nap, 9:05, 1 felhasználó, terhelési átlagok: 0,26 0,32 0,33 ArrayA tömb skalárok rendezett listája . Minden tömbelemnek van egy sorszámmutatója, amely alapján elérhető. Az elemek számozása nulláról indul, vagyis a lista első elemének indexe 0. A tömbváltozó neve elé tegyük a '@' jelet, egy adott tömbelem eléréséhez pedig a '$ ' jelet, mivel a tömb egyetlen eleme skalár. A többdimenziós tömbök úgy modellezhetők, hogy más listákra mutató hivatkozásokat helyeznek el egy listában.
@tömb = ( 1 , 2 , 3 , 4 ); # írjon négy elemet a tömbbe @array print $tömb [ 2 ]; # a harmadik elem nyomtatása print @array [ 2 , 3 ]; # nyomtatja ki a harmadik és negyedik elemet. A # @ azért használatos itt, mert a tömbszeletelés eredménye is egy tömb. Hash táblázatEgy hash tábla inicializálható tömbbel vagy korlátlan számú sorozatból (kulcs, érték) álló listával.
%hash = ( cat => 'cica' , # itt => az úgynevezett "hosszú vessző", ebben a példában a kutya => 'kölyökkutya' , # funkciójában teljesen hasonló a közönséges "," kivéve a tehén => 'borjú' # hogy a bal oldali literálok implicit módon idézettek ); print $hash { 'cat' }; #Print kitten print join ( "-" , kulcsok %hash ) ; # Kiírja az összes billentyűt. Macska-kutya-tehén nyomtatási csatlakozás nyomtatása ( "-" , értékek %hash ) ; # Az összes érték megjelenítése. Kinyomtatás cica-kölyök-borjú nyomtatás csatlakozás ( "-" , %hash ) ; # Kiírja a macska-cica-tehén-borjú-kutya-kölyköt, mert lista környezetben a hash automatikusan # listává bővül (kulcs, érték). Mivel a kivonatban lévő kulcsok nincsenek rendezve, minden alkalommal # pár véletlenszerű sorrendben kerül kiadásra. FunkcióHasználat:
$s = readline * STDIN ; #Olvasson el egy sort az STDIN-ből (standard bemeneti adatfolyam); skaláris kontextus. @values = <FILE> ; #Az összes sor beolvasása néhány megnyitott és a FÁJL leíróhoz társított fájlból; listás kontextus. nyomtatás STDOUT $s ; #Nyomtatás STDOUT-ra (standard kimeneti adatfolyam)Egy pontosabb példa, ahol a typeglob fájlleíró átadására szolgál egy függvénynek:
my $file = 'file.txt' ; #az olvasandó fájl neve open FH , $file ; #nyissa meg a fájlt my $text = _parseFile ( * FH ); #átadja a fájlleírót a $text nyomtatási függvénynek ; zárja be az FH-t ; # feltétlenül zárja be a fájlleíró sub _parseFile { my $fh = shift ; #get file descriptor my $text = csatlakozás ( '' , <$fh> ); #soronként olvassa be a fájlleíróból egy karakterláncot, és tegye be a változóba a $text return $text ; }A Perl legújabb verziói bevezették a fájlleírók skalárokban való tárolásának lehetőségét, az újabb programok pedig előszeretettel használják ezt a módszert.
A szimbólumtáblázatokat arra is használják, hogy két változónevet egyetlen értékhez társítsanak a memóriában, szinonimákat hozva létre, amelyek az eredeti névhez hasonlóan az érték eléréséhez és módosításához használhatók. Ez a képesség a Perl betölthető modulokból, osztályokból és objektumokból álló rendszerének alapja.
Egy objektum a Perlben egyszerűen egy hivatkozás egy adott osztályhoz (csomaghoz). A kommunikációhoz az áldás funkciót használjuk. Egy ilyen csatolt csomag rutinjai metódusok, és első argumentumként hivatkozást kapnak.
A konstruktoroknak nincs speciális szintaxisa, egy csomagrutint használnak, amely az adott csomaghoz társított hivatkozást ad vissza.
Az OOP rendszernek számos bővítménye is van, amelyek lehetővé teszik a szintaxis megváltoztatását és a szintaktikai cukor használatát, ezek közül említést érdemel a Moose cpan modul és annak könnyű változata a Moo [49] . A Moose-t számos projekt és nagyvállalat használja, mint például a BBC vagy a Cisco [50] .
A reguláris kifejezések a Perl fontos részét képezik . Emiatt a Perl alkalmas szövegszerkesztésre. A reguláris kifejezésekkel végzett munka nagy része a =~, m//és operátorok használatával történik s///.
Az operátor m//az egyezés tesztelésére szolgál. A legegyszerűbb esetben a kifejezés eredménye $x =~ m/abc/akkor és csak akkor lesz igaz, ha a karakterlánc $xmegegyezik a reguláris kifejezéssel abc. Például:
Példa | Jelentése |
---|---|
$x =~ /abc/ | A karakterlánc $xtartalmazza az "abc" (al)karakterláncot. Az operátor kezdeti "m" //-je elhagyható, ha használják. |
$x =~ m/a(.{1,3})c/ | A karakterlánc $xtartalmazza az "a" betűt, majd a "\n" újsor karakteren kívül egy-három karaktert, majd a "c" betűt. |
$x =~ m{^p(erl|ugs)$}i | A karakterlánc $xszigorúan megegyezik a „perl” vagy „pugs” karakterlánccal, és nem érzékeny a kis- és nagybetűkre. Ezenkívül a szabályos kifejezés helyett //a {}. |
A keresés és csere az operátor használatával történik s///. A konstrukció $x =~ s/abc/def/;a reguláris kifejezés első előfordulását abca karakterláncra cseréli def.
Példa | Jelentése |
---|---|
$x =~ s/abc/def/g; | /g Az "abc" részkarakterlánc minden előfordulása (amint azt a -global flag jelzi ) a $x"def"-re cserélődik. |
$x =~ s/a(.{1,3})c/!$1!/; | Az "a" betűk első előfordulása $x, majd a "\n" újsor karakter kivételével egy-három karakter, majd a "c" betű helyére az "a" és "c" közötti karakterek lépnek, körülvéve "!". Például a „szintaktika” „synt!cti!” lesz. |
$x =~ s{^p(erl|ugs)}{"P" . lc $1}ieg; | Íme egy példa a módosító használatára /e, jelezve, hogy a helyettesítő karakterlánc helyett kód kerül kiírásra, amelynek eredményét kell használni. A „perl” vagy „pugs” minden előfordulása „Perl”-re, illetve „Pugs”-ra változik. |
A dinamikus reguláris kifejezések megjelenésével (??{ код Perl })és a végrehajtható Perl-kód reguláris kifejezésekbe foglalására szolgáló konstrukció megjelenésével (?{ код Perl })a keresés és a csere lehetőségei szinte korlátlanok. Például lehetővé vált tetszőleges egymásba ágyazási szintű struktúrák keresése.
A Perl reguláris kifejezései annyira népszerűek, hogy közvetlenül szerepelnek más nyelveken, például a PHP -ben és a JavaScript -ben, és vannak olyan bővítménykönyvtárak is, amelyek a kifejezések használatát lefordított nyelveken valósítják meg.
A Perl egy érdekes és gyakran használt funkciója az úgynevezett one-liners - egy sorból származó programok, amelyeket általában közvetlenül az értelmező meghívó sorában adnak meg a -e.
Ez a program prímszámokat nyomtat :
perl - wle '(1 x $_) !~ /^(1|((11+)\3+))$/ && nyomtatás, miközben ++ $_'Ez a példa csak a fájl egyedi sorait nyomtatja ki, a kulcs -nautomatikusan körbevonja a feldolgozó sort egy hurokba, amely a programszöveg után megadott fájlok összes sorát iterálja:
perl - ne '$s{$_}++ || nyomtatási fájlMegjegyzés: Az előző parancs Windows alatti futtatásához cserélje ki az aposztrófokat 'idézőjelekre ".
Ezekben a példákban a Perl rövidségében és első pillantásra érthetetlenségében hasonlít J -re .
Szintén az egyik ilyen példa a program [51] , amely sok vitát kavart, valójában egy Barmin javítás (az összes fájl rekurzív törlésére szolgáló álcázott parancs):
echo "teszt... teszt... teszt..." | perl -e ' $ ??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;lásd'echo "test... test... test..." ennek a parancsnak a végrehajtása nem befolyásolja a munkát, és valószínűleg az éberség elaltatására szolgál. Ami a kód többi részében történik, az egyáltalán nem nyilvánvaló a szándékosan összekeverő írás miatt. Ez a sor csak három, egymás után végrehajtott parancsot tartalmaz. Írjuk fel a parancsot a következőképpen:
$? ? s: ; s:s ;; $? : : s ;; = ] => % - { <-| } <&| `{; ; y; -/:-@[-` { - }; ` - { / " - ; ; s ;; $_ ; lásdAz első konstrukció elemzi a $? az előző parancs visszatérési kódja. Mivel e konstrukció előtt nem jöttek létre gyermekfolyamatok, $? 0-t fog tartalmazni, a második ág pedig s;;=]=>%-{<-|}<&|`{;. Ez a parancs viszont lecseréli a $_ akkumulátor változóban lévő karakterláncot a következőre: =]=>%-{<-|}<&|`{ (az s utáni első karakter beállítja a paraméterhatárolót ehhez az operátorhoz, és bár a perjel '/' vagy '|', az egyértelműség kedvéért ez a konstrukció a ';' elválasztót használja.
A második parancs meglehetősen bonyolult szabályok szerint sugározza az "akkumulátor" tartalmát. A bal oldalon négy karaktertartomány, a jobb oldalon egy tartomány látható. Ha ezeket a tartományokat kibővítjük, a következő megfeleltetést kapjuk:
! "#$%&'()*+,-./:;<=>?@[\]^_`{|} `abcdefghijklmnopqrstuvwxyz{/" -Ennek eredményeként a $_ tartalma lesz
rendszer "rm -rf /"A harmadik parancs azonban kétszer (a flag utasítása szerint ee) "kiszámolja" az akkumulátor tartalmát - a fenti destruktív parancs -, és megpróbálja az akkumulátorban lévő üres karakterláncot a számítás eredményével helyettesíteni.
A Perl messze nem az egyetlen nyelv, amely gazdag szövegfeldolgozási képességeket biztosít. A REFAL , Icon és Snobol programozási nyelvek lehetőséget adnak a "mintaillesztés" programozási módszer teljesebb kihasználására, amelynek speciális esetét a reguláris kifejezések képezik.
Van egy teljes UNIX parancshéj is, amely a Perl nyelven alapul. Ezt psh - nak hívják , és lehetővé teszi a normál shell és a Perl parancsainak keverését [52] .
Perlben akár verseket is írhatsz. Az egyik ilyen vers, a "Black Perl" ("Fekete gyöngy" vagy "Fekete gyöngy"), Larry Wall megemlítette a Usenetnek írt áprilisi bolondok levelében . Eredetileg a Perl 3-hoz íródott, és Larry saját szavaival élve erkölcsi elégedettséget érzett, amikor a vers kudarcot vallott a Perl 5 elemzőjében.
ELŐTT: zárja be az ajtót , minden ablakot és kilép ; várj az időig . varázskönyv megnyitása , tanulmányozása , olvasása ( szkennelés , kijelölés , elmondás ) ; írd ki , nyomtasd ki a hatszögletű egészet minden óra , fordítsd meg a hosszát , írd újra ; öld meg a pókokat , pattogtasd őket , aprítsd , hasítsd fel , öld meg őket . szétkapcsolja a karokat , váltani , várni és figyelni ( hallgatni , várni ), szétválogatni a nyájat ( majd figyelmeztetni a " kecskéket" és megölni a "birkákat" ); öld meg őket , dobd el a nyugtalanságot , az erkölcsi eltolódásokat , az értékeket félre , mindegyiket ; halj meg bárányt ! meghalni , hogy megfordítsa az általad elfogadott rendszert ( elutasítás , tisztelet ); következő lépés , öld meg a következő áldozatot , minden áldozatot , várj , csináld újra a rituálét , amíg "minden szellem elégedett lesz" ; csináld ( " ahogy mondják" ) . csináld ( * mindenkinek *** kell *** részt venni *** *** tiltott ** s * e * x * ) . _ visszaküldeni az utolsó áldozatot ; csomagtest ; _ lépjen ki a kriptából ( idő , idők & "félidő" ) és zárja be , válassza ki ( gyorsan ) és figyelmeztesse a következő áldozatot ; UTÓSZÓ: ne mondd el senkinek , várj , várj az időre ; várj a következő évre , a következő évtizedre ; aludj , aludj , halj meg , halj meg végreKülönösen a wxWidgets interfész könyvtárat használó Perl fejlesztők számára , egy ilyen nyílt termék, mint a Padre IDE (a "Perl Application Development and Refactoring Environment" rövidítése ) [ 53] .
A Perl támogatást a sokoldalú IDE ActiveState Komodo és annak nyílt forráskódú verziója, a Komodo Edit tartalmazza [54] . Az Eclipse esetében a Perl támogatás EPIC [53] [55] bővítménycsomagként valósul meg . Mindkét környezet tartalmaz többek között egy vizuális hibakeresőt [56] . Az IntelliJ IDEA és más JetBrains termékek a Camelcade nevű nyílt forráskódú bővítményen keresztül támogatják a Perl5-öt .
A Pearl támogatás ilyen vagy olyan formában elérhető a legtöbb programozói szövegszerkesztőben, mint például a többplatformos Vim [53] , Emacs [53] , SciTE [53] , Gedit [57] , Geany , jEdit [57] , Sublime Text , vagy dedikált Windows Notepad++ [53] [57] és PSPad számára, valamint shareware termékek, például az UltraEdit és az UEStudio az IDM Computer Solutions, Inc.-től. Mac OS esetén a TextMate [53] szolgálhat ilyen szerkesztőként .
A Perl Editor, amely a DzSoft [58] [59] [60] programozói számára készült speciális shareware szerkesztők sorozatának része , szintén igen népszerű a Windows felhasználók körében . A Mastak Absolute Perl [61] ingyenes szerkesztője meglehetősen ismert volt , de fejlesztése és támogatása leállt, a legújabb verzió 2003. szeptember 29-i dátuma [62] . Egy másik hazai ingyenes perl-szerkesztő Windowshoz a Perl Express [63] (a legújabb verzió orosz felülettel a 2.4.5, 2005. december 2-án, angol felülettel - 2.5, 2005. december 23-án) [64] . A Perlre specializálódott további fejlesztői környezetek közé tartozik a megosztó IDE PerlBuilder [65] [66] [67] és a helyi szerkesztő, a Collie Perl Shell 2.0 [66] [68] .
![]() | ||||
---|---|---|---|---|
Szótárak és enciklopédiák | ||||
|
Perl | |
---|---|
Emberek |
|
Dolgok | |
Keretrendszerek |
|
|
Ingyenes és nyílt forráskódú szoftver | |
---|---|
A fő dolog |
|
Közösség |
|
Szervezetek | |
Licencek | |
Problémák | |
Egyéb |
|
|