Perl | |
---|---|
Kieliluokka | ohjelmointikieli |
Esiintyi | 1987 [3] |
Tekijä | Larry Wall |
Kehittäjä | Larry Wall [1] ja Perl Foundation [d] [2] |
Tiedostotunniste _ | .pl[4] tai [4].pm |
Vapauta | 5.36.0 (28. toukokuuta 2022 ) |
Tyyppijärjestelmä | heikko dynamiikka |
Vaikutettu | C++ , C [1] , sed , AWK , BASIC , Lisp ja UNIX-kuori |
vaikutti | Raku , Ruby , PHP , Groovy , JavaScript |
Lisenssi | Artistic License [d] [5]ja GNU General Public License, versio 1.0 tai uudempi [d] [6][7] |
Verkkosivusto |
perl.org dev.perl.org/perl5/ |
OS | Linux [8] , macOS [8] , Microsoft Windows [8] , Solaris [8] , AIX [8] ja HP-UX [8] |
Mediatiedostot Wikimedia Commonsissa |
Perl on yleiskäyttöinen, korkealle tasolle tulkittu dynaaminen ohjelmointikieli , jonka on luonut kielitieteilijä koulutukseltaan Larry Wall . Kielen nimi on virallisesti lyhenne sanoista Practical Extraction and Report Language ("käytännöllinen kieli tietojen poimimiseen ja raporttien kokoamiseen") [9] ja vitsillä - nimellä Pathologically Eclectic Rubbish Lister ("patologisesti eklektinen roskalista" [9] ; kielten kehittäjät eivät pidä sen nimeä lyhenteenä [10] . Aluksi nimi koostui viidestä merkistä ja tässä muodossa täsmäsi englannin sanan helmi ("helmi") kanssa. Mutta sitten tuli tiedoksi, että tällainen kieli oli olemassa (katso PEARL ), ja kirjain "a" poistettiin. Perlin kielen symboli on kameli - ei kovin kaunis, mutta erittäin kestävä eläin, joka pystyy tekemään kovaa työtä.
Kielen pääominaisuus on sen runsaat mahdollisuudet työskennellä tekstin kanssa, mukaan lukien työskentely syntaksiin sisäänrakennettujen säännöllisten lausekkeiden kanssa. Perl on perinyt monia ominaisuuksia C- , AWK- ja UNIX - komentosarjakielistä .
Perl on kuuluisa valtavasta CPAN -lisämoduulien kokoelmastaan (noin 200 000 ), mikä parantaa huomattavasti sen ominaisuuksia. CPAN-kokoelma sijaitsee osoitteessa https://www.cpan.org .
Perl on yleiskäyttöinen ohjelmointikieli, joka luotiin alun perin tekstinkäsittelyyn, mutta sitä käytetään nykyään monenlaisiin tehtäviin, mukaan lukien järjestelmänhallinta , web-kehitys , verkkoohjelmointi , pelit, bioinformatiikka ja graafisen käyttöliittymän kehittäminen .
Kielen voi luonnehtia enemmän käytännöllisyyttä (helppokäyttöisyys, tehokkuus, täydellisyys) kuin kauniisti (tyylikkyys, minimalismi) [11] . Kielen tärkeimmät edut ovat tuki erilaisille paradigmoille ( proseduaaliset , olio- ja toiminnalliset ohjelmointityylit), muistin ohjaus (ei silmukkapohjaista roskakeräystä), sisäänrakennettu tuki tekstinkäsittelyyn sekä suuri kokoelma kolmansia -juhlamoduulit .
Larry Wallin mukaan Perlillä on kaksi mottoa. Ensimmäinen on " On enemmän kuin yksi tapa tehdä se ", joka tunnetaan myös lyhenteellä TMTOWTDI . Toinen iskulause on " Helppojen asioiden tulee olla helppoja ja vaikeiden asioiden pitäisi olla mahdollisia ".
Perlin yleinen rakenne juontaa juurensa pääpiirteissään C -kieleen . Perl on luonteeltaan proseduuraalinen , ja siinä on muuttujia , tehtävälausekkeita , kaarevilla aaltosulkeilla erotettuja koodilohkoja , ohjausrakenteita ja toimintoja .
Perl lainaa myös useita ominaisuuksia UNIX - shell - ohjelmointikielistä . Kaikki muuttujat on merkitty alkumerkeillä, jotka ilmaisevat tarkalleen muuttujan tietotyypin kyseisessä kontekstissa (esim. skalaari, array, hash). Tärkeää on, että nämä merkit mahdollistavat muuttujien interpoloinnin merkkijonoihin. Perlissä on monia sisäänrakennettuja toimintoja, jotka tarjoavat työkaluja, joita usein käytetään shell-ohjelmointiin, kuten lajitteluun tai järjestelmäpalvelujen kutsumiseen.
Perl lainaa taulukoita Lispistä , säännölliset lausekkeet AWK :sta ja sed :stä ja tiivisteet ("assosiatiiviset taulukot") AWK:sta. Säännölliset lausekkeet helpottavat monia jäsennys-, tekstinkäsittely- ja tietojenkäsittelytehtäviä.
Perl 5 lisäsi tuen monimutkaisille tietotyypeille, ensiluokkaisille funktioille ( sulkeminen arvona) ja objektimallille. Jälkimmäinen sisältää viittaukset , paketit, menetelmien suorittamisen luokasta, muuttujat, joissa on leksikaalinen laajuusmäärittely , ja kääntäjäkäskyt ( esimerkiksi strict). Suurin Perl 5:n parannus oli kyky laittaa koodia "paketteihin" ( paketti ) moduuleiksi uudelleenkäyttöä varten. Larry Wall huomautti myöhemmin, että "Perl 5:n modulaarisen järjestelmän koko tarkoitus oli edistää Perlin kulttuurin kasvua, ei koodiriviä" [12] .
Kaikissa Perlin versioissa on automaattinen tietojen kirjoittaminen ja automaattinen muistinhallinta. Tulkki tietää kunkin ohjelmaobjektin tyypin ja muistivaatimukset, se varaa ja vapauttaa muistia suorittamalla viitelaskennan . Tietotyypin käännös toiseksi - esimerkiksi numero merkkijonoksi - tapahtuu automaattisesti ajon aikana, mahdottomat tietotyyppien käännökset johtavat kohtalokkaaseen virheeseen.
Työskentele WindowsissaMicrosoft Windows -käyttäjät käyttävät yleensä jakeluja, joissa on valmiiksi käännetyt binaarit, kuten ActivePerl tai Strawberry Perl , koska Perlin kääntäminen lähdekoodista kyseisessä käyttöjärjestelmässä ei ole helppo tehtävä. Cygwin voi helpottaa tehtävää .
Larry Wall aloitti Perlin kehittämisen vuonna 1987 työskennellessään ohjelmoijana Unisysille [13] . Versio 1.0 julkaistiin ja julkistettiin comp.sources.misc- uutisryhmässä 18. joulukuuta 1987 [14] " awk :n ja sed :n korvaajaksi ".
Perl 2 julkaistiin vuonna 1988 . Sen tärkein innovaatio oli uudelleen suunniteltu säännöllinen lausekemoottori . Vuonna 1989 julkaistu Perl 3 sai mahdollisuuden käsitellä binääritietovirtoja .
Aluksi ainoa Perlin dokumentaatio oli yksi (valtava pituus) man - sivu. Vuonna 1991 Programming Perl (joka monet ohjelmoijat tuntevat kansikuvan vuoksi nimellä Camel Book ) julkaistiin ja siitä tuli de facto kielistandardi. Samaan aikaan kielen versio "päivitettiin" 4:ään, ei niinkään merkitsemään merkittäviä muutoksia, vaan osoittamaan, että tämä kielen versio dokumentoitiin kirjassa.
Perl 4 kävi läpi sarjan julkaisuja, pysähtyen Perl 4.036:een vuonna 1993 . Tässä vaiheessa Larry Wall hylkäsi Perl 4:n ja aloitti työskentelyn Perl 5:n parissa. Perl 5:n kehitys alkoi vuonna 1994. Samaan aikaan luotiin perl5-porters- postituslista koordinoimaan Perl 5:n siirtämistä eri alustoille. Se on edelleen tärkein foorumi Perl 5:n kehitykselle, ylläpidolle ja siirtämiselle [15] .
Perl 5.000 julkaistiin 17. lokakuuta 1994 . [16] Se sisälsi täysin uudelleen kirjoitetun tulkin sekä monia uusia kieliominaisuuksia, kuten objekteja , viittauksia , paikallisia muuttujia ( my $var_name) ja moduuleja . Moduulit olivat erityisen tärkeä osa, koska ne tarjosivat mekanismin kielen laajentamiseen ilman tulkin muutoksia. Tämä mahdollisti tulkin vakautumisen, mutta se antoi myös tavallisille Perl-ohjelmoijille mahdollisuuden lisätä uusia ominaisuuksia kieleen. Perl 5:tä kehitetään aktiivisesti tähän päivään asti.
Perl 5.001 julkaistiin 13. maaliskuuta 1995. Perl 5.002 julkaistiin 29. helmikuuta 1996 uudella prototyyppituella. Tämä antoi moduulien tekijöille mahdollisuuden luoda toimintoja, jotka toimivat aivan kuten Perlin sisäänrakennetut funktiot. Perl 5.003 julkaistiin 25. kesäkuuta 1996 ja se korjasi havaitut tietoturvaongelmat.
Yksi Perl 5:n historian tärkeimmistä tapahtumista tapahtui itse kielen ulkopuolella ja oli seurausta moduulituesta. 26. lokakuuta 1995 aloitti työnsä CPAN ( Comprehensive Perl Archive Network ) , josta tuli Perl - moduulien arkisto sekä itse kielen lähdekoodi . Tällä hetkellä CPAN :ssa on yli 198 600 moduulia, jotka ovat luoneet yli 14 000 ohjelmoijaa [17] [18] .
Perl 5.004 julkaistiin 15. toukokuuta 1997 ja sisälsi muun muassa UNIVERSAL-paketin, joka antoi kielelle perusobjektin, josta kaikki luokat johdettiin automaattisesti. Mukana on myös mahdollisuus pyytää moduulien versiota. Tämän lisäksi Perl alkoi tukea Microsoft Windowsia sekä useita muita käyttöjärjestelmiä.
Perl 5.005 julkaistiin 22. kesäkuuta 1998 . Tämä julkaisu sisälsi useita parannuksia regex-moottoriin, uusia koukkuja taustajärjestelmään moduulien kautta B::*, lainausoperaattorin qr//säännöllisille lausekkeille, suuren valikoiman muita uusia moduuleja ja tuen useille käyttöjärjestelmille, erityisesti BeOS :lle .
Perl 5.6 julkaistiin 22. maaliskuuta 2000 . Suuria muutoksia olivat tuki 64-bittisille järjestelmille, Unicode -merkkijonoesitys , tuki suurille tiedostoille (tiedostot, jotka ovat suurempia kuin 2 Gt ) ja avainsana our[19] [20] . Perl 5.6:n kehitystyön aikana tehtiin päätös muuttaa versioiden nimeämistä lähemmäksi muiden avoimen lähdekoodin projektien nimeämistä. Versiota 5.005_63 seurasi versio 5.5.640; Suunnitelman mukaan kehitysversioille määrättiin parittomat numerot, vakaat versiot parilliset.
Vuonna 2000 Larry Wall kehotti yhteisöä keskustelemaan aktiivisesti ehdotuksista seuraavaksi Perlin versioksi. Tämän keskustelun tuloksena syntyi 361 RFC :tä ( Request for Comments - "request for comments"), joita käytettiin Perl 6 :n kehittämisessä . Vuonna 2001 [21] aloitettiin työ lopullisen asiakirjan parissa, jossa oli yhteenveto ehdotuksista uuden sukupolven Perlille. Tulosta ei esitetty virallisena asiakirjana, vaan tiivistelmänä kaikista RFC:istä. Tähän mennessä Perl 6 oli olemassa vain kielenkuvauksena.
Versiot 5.8.xPerl 5.8 julkaistiin ensimmäisen kerran 18. heinäkuuta 2002, ja se on saanut vuosittaisen päivityksen siitä lähtien. Perl 5.8:n uusin versio 5.8.9 julkaistiin 14. joulukuuta 2008. Perl 5.8 paransi Unicode-tukea, lisäsi uuden I/O-toteutuksen, lisäsi monisäikeisen tuen, lisäsi numeerista tarkkuutta ja lisäsi useita uusia moduuleja [22] .
Vuonna 2004 aloitettiin työ synopsiksen parissa, joka alun perin suunniteltiin asiakirjojen sarjaksi, joka tiivistää yllä mainitun lopullisen asiakirjan. Tästä asiakirjajoukosta tuli kuitenkin vähitellen Perl 6 -spesifikaatio. Helmikuussa 2005 Otrius Tan aloitti työskentelyn Pugs , Perl 6 -tulkin parissa, joka on kirjoitettu Haskellilla [23] . Tämä oli ensimmäinen todellinen yritys tehdä Perl 6:sta totta. Tämä yritys kuoli vuonna 2006.
Versiot 5.10.x18. joulukuuta 2007, Perl 1.0, Perl 5.10.0 julkaistiin 20. vuosipäivänä. Tämä versio sisälsi useita merkittäviä innovaatioita, jotka tuovat sen lähemmäksi Perl 6 :ta . Jotkut näistä innovaatioista ovat uusia vaihtokäskyjä (nimeltään "given"/"kun"), säännöllisten lausekkeiden päivityksiä ja "älykäs" hakuoperaattori "~~" [24] [25] .
Tänä aikana aloitettiin vakavasti uuden Perl 6 -toteutuksen, joka tunnetaan nimellä Rakudo Perl , kehittäminen, joka kehitettiin yhdessä Parrot - virtuaalikoneen kanssa . Marraskuusta 2009 lähtien Rakudo Perliä on päivitetty säännöllisesti joka kuukausi, ja se on tällä hetkellä Perl 6 :n täydellisin toteutus .
Versiot 5.11.xPerl 5:n kehitysprosessissa tapahtui merkittävä muutos Perl 5.11:n käyttöönoton jälkeen. Kehittäjäyhteisö on siirtynyt kuukausittaiseen julkaisujaksoon, ja julkaisupäivä on suunniteltu kolme kuukautta etukäteen.
Versiot 5.12.x12. huhtikuuta 2010 Perl 5.12.0 julkaistiin yleisölle. Merkittäviä innovaatioita ovat muun muassa uusi syntaksituki package NAME VERSION, Yada Yada -operaattori (käytetään merkitsemään paikkamerkkikoodia, jota ei ole vielä otettu käyttöön), täydellinen ratkaisu Y2038-ongelmaan (Y2038), säännöllisen lausekkeen operaattorin ylikuormitus, tuki DTracelle (dynaaminen jäljityskehys), sekä täysi tuki Unicode 5.2 -standardille [26] . 7. syyskuuta 2010 julkaistiin Perl 5.12.2 ja 21. tammikuuta 2011 Perl 5.12.3. Nämä julkaisut sisältävät moduulipäivityksiä sekä joitain dokumentaatiomuutoksia [27] [28] . Versio 5.12.4 julkaistiin 20. kesäkuuta 2011. Tämän haaran uusin versio, 5.12.5, julkaistiin 10. marraskuuta 2012.
Versiot 5.14.x14. toukokuuta 2011 Perl 5.14 julkaistiin. JSON - tuki on ollut sisäänrakennettu versiosta 5.14.2 lähtien. Tämän haaran uusin versio, 5.14.4, julkaistiin 10. maaliskuuta 2013.
Versiot 5.16.x20. toukokuuta 2012 Perl 5.16 julkaistiin. Merkittävä uusi ominaisuus on kyky määrittää oikea Perl-versio emuloitavaksi, jolloin käyttäjät voivat päivittää Perlin mutta pitää vanhat skriptit, jotka muuten eivät olisi yhteensopivia uuden version kanssa, edelleen toiminnassa [29] . Perl 5.16 -ydin tukee Unicode 6.1 :tä [29] .
Versiot 5.18.x18. toukokuuta 2013 Perl 5.18 julkaistiin. Merkittäviä innovaatioita ovat uudet dtrace-koukut, leksikaaliset funktiot, ytimeen sisältyvien funktioiden määrän kasvu, tiivisteiden toteutuksen muutokset turvallisuussyistä, tuki Unicode 6.2:lle [30] .
Versiot 5.20.x - 5.26.xVersio 5.20 julkaistiin 27. toukokuuta 2014 [31] .
16. huhtikuuta 2015 julkistettiin version 5.22 [32] odotettu julkaisu ja 9. toukokuuta 2016 versio 5.24 [33] julkaistiin .
30. toukokuuta 2017 julkaistiin seuraava vakaa versio numero 26 [34] .
Versiot 5.28.xVersio 5.28.0 julkaistiin 22. kesäkuuta 2018 [35] .
Tärkeimmät innovaatiot :
Palauttaa "false", koska kirjain "e" on kyrillinen (lisää kirjoitusajoista [36] )
Kokeelliset ominaisuudet :
Suorituskyvyn parannukset :
Muut muutokset :
Se julkaistiin 20. kesäkuuta 2020 [37] ja 13 kuukauden kehitystyön aikana noin 140 tuhatta koodiriviä 880 tiedostossa muutettiin. Perl 5.32 siirtyy pitkäaikaiseen tukeen 5 vuodeksi tai pidemmäksi ajaksi. "Perl ja Raku -konferenssissa pilvessä" [38] Sawyer X. ilmoitti merkittävästä Perlin versiomuutoksesta 5:stä 7:ään [39] . Perl 7:n odotetaan olevan sama Perl 5.32 nykyaikaisilla oletuksilla.
Tärkeimmät innovaatiot:
Muutama optimointi:
Julkaistu 20. toukokuuta 2021 [40] [41] . Perl 5.34.0 edustaa noin 11 kuukautta kehitystä Perl 5.32.0:n julkaisusta lähtien ja sisältää noin 280 000 muutosriviä 2100 tiedostossa 78 kirjoittajalta. Lukuun ottamatta dokumentaatiota, automaattisesti luotuja tiedostoja ja työkaluja itse julkaisun rakentamiseen, 150 000 riviä muutettiin 1300 .pm , .t , .c ja .h tiedostoissa.
Uusi toiminnallisuus:
Jotkut tarkkailijat ovat pitäneet Perl 5.10:n julkaisemista Modern Perl -liikkeen käynnistämisenä [42] [43] . Erityisesti tämä lause kuvaa kehitystyyliä, joka sisältää CPAN:n käytön, kielen viimeisimmän kehityksen hyödyntämisen ja korkealaatuisen koodin vaatimisen [44] .
Vuoden 2012 lopussa ja 2013 käynnistettiin useita projekteja Perl 5:n vaihtoehtoisesta toteutuksesta: Perl5 in Perl6 (Rakudo Perl -tiimi) [45] , moe (Stephen Little ja ystävät) [46] , p2 [47] (Perl11 joukkue Reini Urbanin alaisuudessa), sekä gperl (goccy) [48] .
Vuodesta 2000 lähtien kielestä on kehitetty uusi (6.) versio. Toisin kuin aikaisemmissa versioissa, kehittäjät suunnittelevat luovansa hyvin määritellyn kielistandardin. Kokeellisia Perl 6 -kääntäjiä on tällä hetkellä olemassa , mutta keskustelu uusista säännöistä jatkuu.
Perlin syntaksilla on monia yhtäläisyyksiä C :n , AWK :n , sed :n ja Bourne-kuoren syntaksin kanssa .
Lähdekoodin ensimmäinen rivi voi alkaa sanoilla "#!/Path/to/Perl [-switches]" - joka kertoo järjestelmälle polun Perl-tulkkiin ohjelmien suorittamiseksi UNIX-järjestelmissä ja niiden suorittamiseksi web-palvelimella (katso myös: shebang (Unix) ).
Yksinkertaisin ohjelma " Hei, maailma!" " seuraavasti:
#!/usr/bin/perl print "Hei, maailma!\n" ;joko CGI :lle:
#!/usr/bin/perl print "Content-type: text/html\n\n" ; tulosta "Hei maailma!" ;joko käyttämällä jotakin postmodernista verkkokehyksestä
käytä Mojolicious::Lite ; get '/' => { text => 'Hei maailma!' }; sovellus -> aloita ;tai käyttämällä PSGI - määritystä
my $app = sub { return [ 200 , [ 'Content-Type' => 'text/plain' ], [ "hei, maailma\n" ]]; }Lisääminen merkkijonoon.
$x = 5 ; $x .= 0 ; tulosta $x ; #viisikymmentäJa näin voit tulostaa numeron googol .
tulostaa 1 , 0 x 100 ;Perustietotyypit: skalaari , taulukko , hash taulukko , funktio , tiedostoosoitin , symbolitaulukon syöttö . Erityyppiset muuttujat erottuvat muuttujan nimeä edeltävästä merkistä:
Tyyppi | Symboli | Esimerkki | Kuvaus |
---|---|---|---|
Skalaari | $ | $foo | yksittäinen arvo; voi olla numero, merkkijono , tiedostoviittaus tai linkki . |
joukko | @ | @foo | Tilattu skalaarikokoelma. |
Hash-taulukko | % | %foo | Kokoelma merkkijono-skalaari-pareja; merkkijonoja kutsutaan avaimille ja skalaareja arvoiksi . Synonyymi on assosiatiivinen taulukko . |
Tiedoston kuvaus | < > | $foo tai FOO | Esitys avoimesta tiedostosta tai muusta kohteesta, joka on avoinna lukemista ja/tai kirjoittamista varten. |
Toiminto | & | &foo | Koodinpala, joka ottaa argumentteja, suorittaa toimintoja ja palauttaa arvoja. |
Symbolitaulukon merkintä | * | *foo | Symbolitaulukkomerkintä kaikille tyypeille nimeltä "foo". |
Skalaarimuuttujia käytetään yksittäisten arvojen tallentamiseen. Ne voivat sisältää numeroita, merkkijonoja ja viittauksia muihin objekteihin . Skalaarimuuttujan nimen edessä on oltava dollarimerkki '$'. Skalaarimuuttujan tyyppi ei ole kiinteä (toisin kuin esimerkiksi C -kieli ) ja se määräytyy dynaamisesti kontekstista riippuen. Esimerkiksi,
$x = 10 ; # numero $y = $x + 1 ; # käytä $x numerona... $z = $x . 'merkkijono' ; # ... ja nyt merkkijonona $ref = \ $x ; # $ref on osoitin $x $$ref = 10 ; # $x sisältää arvon 10Merkkijonotiedot on kirjoitettava lainausmerkkeihin. Perl käyttää kahdenlaisia lainausmerkkejä, yksittäisiä lainausmerkkejä ja kaksoislainausmerkkejä. Merkitsemällä merkkijono lainausmerkkeihin voit korvata esiintyvät muuttujien nimet automaattisesti niiden arvoilla. Merkkijonojen sulkeminen yksittäisiin lainausmerkkeihin estää tämän toiminnan:
## Esimerkki muuttujien interpoloinnista lainausmerkeissä $pi = 3,141592654 ; $var1 = 'Pi:n arvo on $pi\n' ; tulosta $var1 ; # Pi:n arvo on $pi\n $var2 = "Pi:n arvo on $pi\n" ; tulosta $var2 ; # Pi:n arvo on 3,141592654Jos haluat sisällyttää kaksoislainausmerkkejä merkkijonoon, joka on lainattu kaksoislainausmerkillä, käytä merkkiä \". Jos haluat sisällyttää lainausmerkkejä kertalainausmerkkiin, käytä merkkiä \'. Useita lainausmerkkejä sisältävien merkkijonojen työskentelyn helpottamiseksi Perl antaa sinun Käytä vaihtoehtoisia lainausmenetelmiä Vaihtoehtoinen muoto käyttää mitä tahansa merkkiparia, joka on sijoitettu q-kirjaimen (jäljittelee lainausmerkkien käyttäytymistä) tai qq (jäljittelee lainausmerkkien käyttäytymistä) jälkeen:
## Esimerkki vaihtoehtoisten lainausmerkkien käytöstä $pi = 3,141592654 ; $link1 = q{<a href="http://en.wikipedia.org/wiki/Pi">$pi</a>} ; tulosta $linkki1 ; # <a href="http://ru.wikipedia.org/wiki/Pi">$pi</a> $link2 = qq{<a href="http://ru.wikipedia.org/wiki/Pi ">$pi</a>} ; tulosta $link2 ; # <a href="http://ru.wikipedia.org/wiki/Pi">3.141592654</a>Toinen lainaustyyppi Perlissä ovat takaisin lainausmerkkejä. Ne sisältävät käyttöjärjestelmäohjelmia, joiden tulos voidaan ohjata Perl-tulkkiin. Esimerkiksi:
## Esimerkki backticksistä UNIX-komentojen suorittamiseen $välilyönti = `du -s -k /usr/local/bin` ; tulosta $välilyönti ; #6264 /usr/local/bin $sysuptime = `käyttöaika` ; tulosta $sysuptime ; # 2:24 ylös 1 päivä, 9:05, 1 käyttäjä, kuormituksen keskiarvot: 0,26 0,32 0,33 ArrayTaulukko on järjestetty luettelo skalaareista . Jokaisella taulukon elementillä on järjestysindeksi, jonka avulla siihen pääsee käsiksi. Elementtien numerointi alkaa nollasta, eli luettelon ensimmäisellä elementillä on indeksi 0. Ennen taulukkomuuttujan nimeä on laitettava @-merkki ja tiettyyn taulukkoelementtiin pääsemiseksi käytä '$ ' -merkki, koska taulukon yksittäinen elementti on skalaari. Moniulotteisia taulukoita voidaan mallintaa lisäämällä linkkejä muihin luetteloihin.
@array = ( 1 , 2 , 3 , 4 ); # kirjoita neljä elementtiä taulukkoon @array print $array [ 2 ]; # tulosta kolmas elementti print @array [ 2 , 3 ]; # tulosta kolmas ja neljäs elementti. # @ käytetään tässä, koska taulukon viipalointitoiminnon tulos on myös matriisi. Hash-taulukkoHash-taulukko voidaan alustaa taulukolla tai listalla, joka koostuu rajoittamattomasta määrästä sekvenssejä (avain, arvo).
%hash = ( kissa => 'kissanpentu' , # tässä => on ns. "pitkä pilkku", tässä esimerkissä koira => 'pentu' , # funktioltaan täysin samanlainen kuin tavallinen "," paitsi lehmä => 'calf' # että vasemmalla olevat literaalit lainataan epäsuorasti ); tulosta $hash { 'kissa' }; #Print kitten print join ( "-" , avaimet %hash ) ; # Anna kaikki näppäimet. Tulosta kissa-koira-lehmä tulostaa liitos ( "-" , arvot %hash ) ; # Näytä kaikki arvot. Tulosta kissanpentu-pentu-vasikka tulostaa liitos ( "-" , %hash ) ; # Tulostaa kissa-kissanpentu-lehmän-vasikka-koiranpentu, koska listakontekstissa hash laajenee automaattisesti # listaksi (avain, arvo). Koska tiivisteen avaimia ei ole lajiteltu, # paria tulostetaan satunnaisessa järjestyksessä joka kerta. ToimintoKäyttö:
$s = readline * STDIN ; #Lue yksi rivi STDIN:stä (vakiosyöttövirta); skalaarikonteksti. @arvot = <TIEDOSTO> ; #Luetaan kaikki rivit jostakin tiedostosta, joka on avattu ja liitetty FILE-kuvaajaan; luettelo kontekstissa. tulosta STDOUT $s ; #Tulosta STDOUT-muotoon (tavallinen tulostusvirta)Tarkempi esimerkki, jossa typegloba käytetään siirtämään tiedostokuvaaja funktiolle:
minun $tiedosto = 'tiedosto.txt' ; #luettavan tiedoston nimi auki FH , $file ; #avaa tiedosto minun $teksti = _parseFile ( * FH ); #välitä tiedostokuvaaja tulostusfunktiolle $text ; sulje FH ; #muista sulkea tiedostokuvaaja sub _parseFile { my $fh = shift ; #hae tiedostokuvaus minun $teksti = liity ( '' , <$fh> ); #lue rivi riviltä tiedostokuvaajasta merkkijonoksi ja laita muuttujaan $text return $text ; }Viimeaikaiset Perlin versiot ovat ottaneet käyttöön mahdollisuuden tallentaa tiedostokuvaajat skalaariin, ja uudemmat ohjelmat käyttävät tätä menetelmää mieluummin.
Symbolitaulukoita käytetään myös yhdistämään kaksi muuttujan nimeä yhteen arvoon muistissa, jolloin luodaan synonyymejä, joita voidaan käyttää arvoon pääsyyn ja muokkaamiseen alkuperäisen nimen tavoin. Tämä ominaisuus on Perlin ladattavien moduulien, luokkien ja objektien järjestelmän perusta.
Objekti Perlissä on yksinkertaisesti viittaus, joka liittyy tiettyyn luokkaan (pakettiin). Viestintää varten käytetään siunaustoimintoa. Tällaisen linkitetyn paketin rutiinit ovat menetelmiä ja saavat viitteen ensimmäisenä argumenttina.
Rakentajille ei ole erityistä syntaksia, käytetään pakettirutiinia, joka palauttaa kyseiseen pakettiin liittyvän viittauksen.
OOP-järjestelmään on myös monia laajennuksia, joiden avulla voit muuttaa syntaksia ja käyttää syntaktista sokeria, joista mainittakoon Moose cpan -moduuli ja sen kevyt versio Moo [49] . Moosea käyttävät monet projektit ja suuret yritykset, kuten BBC tai Cisco [50] .
Säännölliset lausekkeet ovat tärkeä osa Perliä . Tämä tekee Perlistä hyvin sopivan tekstinkäsittelyyn. Suurin osa työstä säännöllisten lausekkeiden kanssa tehdään käyttämällä =~, m//ja -operaattoreita s///.
Operaattoria m//käytetään ottelun testaamiseen. Yksinkertaisimmassa tapauksessa lausekkeen tulos $x =~ m/abc/on tosi, jos ja vain jos merkkijono $xvastaa säännöllistä lauseketta abc. Esimerkiksi:
Esimerkki | Merkitys |
---|---|
$x =~ /abc/ | Merkkijono $xsisältää (ali)merkkijonon "abc". Operaattorin alkukirjain "m" //voidaan jättää pois käytettäessä. |
$x =~ m/a(.{1,3})c/ | Merkkijono $xsisältää kirjaimen "a", sitten minkä tahansa yhdestä kolmeen muuta merkkiä kuin rivinvaihtomerkkiä "\n" ja sitten kirjaimen "c". |
$x =~ m{^p(erl|ugs)$}i | Merkkijono $xon tiukasti sama kuin "perl" tai "pugs", eikä siinä ole merkitystä. Myös säännöllisen lausekkeen sijaan //, jota ympäröi {}. |
Haku ja korvaaminen suoritetaan käyttämällä operaattoria s///. Rakenne $x =~ s/abc/def/;korvaa säännöllisen lausekkeen ensimmäisen esiintymän abcmerkkijonolla def.
Esimerkki | Merkitys |
---|---|
$x =~ s/abc/def/g; | /g Kaikki alimerkkijonon "abc" esiintymät (joka osoittaa -global lippu ) $xkorvataan "def":llä. |
$x =~ s/a(.{1,3})c/!$1!/; | Ensimmäinen $xkirjainten "a" esiintyminen, sitten mikä tahansa yhdestä kolmeen muuta merkkiä kuin rivinvaihtomerkki "\n" ja sitten kirjain "c" korvataan kirjainten "a" ja "c" välissä olevilla merkeillä, joita ympäröi "!". Esimerkiksi "syntaktisesta" tulee "synt!cti!". |
$x =~ s{^p(erl|ugs)}{"P" . lc $1}ieg; | Tässä on esimerkki muokkaajan käytöstä /e, mikä osoittaa, että korvaavan merkkijonon sijaan kirjoitetaan koodi, jonka tulosta tulee käyttää. Kaikki esiintymät "perl" tai "pugs" muutetaan joka tapauksessa "Perl" ja "Pugs" vastaavasti. |
Dynaamisten säännöllisten lausekkeiden (??{ код Perl })ja suoritettavan Perl-koodin sisällyttämisen säännölliseen lausekkeeseen syntymisen myötä (?{ код Perl })haku- ja korvausmahdollisuudet ovat lähes rajattomat. Esimerkiksi mielivaltaisen sisäkkäistason rakenteiden etsiminen tuli mahdolliseksi.
Perlin säännölliset lausekkeet ovat niin suosittuja, että ne sisältyvät suoraan muihin kieliin, kuten PHP ja JavaScript , ja on myös liitännäiskirjastoja, jotka toteuttavat lausekkeiden käytön käännetyillä kielillä.
Mielenkiintoinen ja usein käytetty Perlin ominaisuus on ns. one-liners - ohjelmat yhdeltä riviltä, jotka yleensä määritetään suoraan tulkin kutsuriville käyttämällä -e.
Tämä ohjelma tulostaa alkuluvut :
perl - wle '(1 x $_) !~ /^(1|((11+)\3+))$/ && tulosta samalla ++ $_'Tämä esimerkki tulostaa vain tiedostotiedoston yksilölliset rivit, avain -nkäärii käsittelyrivin automaattisesti silmukaksi, joka toistuu kaikkien ohjelmatekstin jälkeen määritettyjen tiedostojen rivien läpi:
perl - ne '$s{$_}++ || tulosta tiedostoHuomautus: Jos haluat suorittaa edellisen komennon Windowsissa, korvaa sen heittomerkit 'lainausmerkeillä ".
Näissä esimerkeissä Perl muistuttaa J :tä lyhyydessään ja ensisilmäyksellä käsittämättömyydessä .
Myös yksi tällaisista esimerkeistä on paljon kiistaa aiheuttanut ohjelma [51] , joka on itse asiassa Barmin -korjaus (naamioitu komento poistaa kaikki tiedostot rekursiivisesti):
echo "testi... testi... testi..." | perl -e ' $ ??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;katso'echo "test... test... test..." tämän komennon suorittaminen ei vaikuta työhön, ja se lisätään todennäköisesti valppauden tuudittamiseen. Se, mitä koodin muussa osassa tapahtuu, ei ole ollenkaan ilmeistä tahallisen sekavan kirjoittamisen vuoksi. Tämä rivi sisältää vain kolme peräkkäin suoritettavaa komentoa. Kirjoita komento seuraavasti:
$? ? s: ; s:s ;; $? : : s ;; = ] => % - { <-| } <&| `{; ; y; -/:-@[-` { - }; ` - { / " - ; ; s ;; $_ ; katsoEnsimmäinen konstruktio jäsentää $? on edellisen komennon palautuskoodi. Koska aliprosesseja ei luotu ennen tätä rakennetta, $? sisältää 0, ja toinen haara suoritetaan s;;=]=>%-{<-|}<&|`{;. Tämä komento puolestaan korvaa merkkijonon $_ akkumuuttujassa =]=>%-{<-|}<&|`{ (ensimmäinen merkki s:n jälkeen asettaa parametrin erottimen tälle operaattorille, ja vaikka vinoviiva '/' tai '|', selvyyden vuoksi tämä konstruktio käyttää erotinta ';').
Toinen komento lähettää "akun" sisällön melko monimutkaisten sääntöjen mukaisesti. Neljä merkkialuetta on merkitty vasemmalla puolella ja yksi alue oikealla. Jos laajennamme näitä alueita, saamme seuraavan vastaavuuden:
! "#$%&'()*+,-./:;<=>?@[\]^_`{|} `abcdefghijklmnopqrstuvwxyz{/" -Tämän seurauksena kohteen $_ sisällöstä tulee
järjestelmä "rm -rf /"Kolmas komento kuitenkin kahdesti (lipun ohjeiden mukaan ee) "laskee" akun sisällön - yllä oleva tuhoava komento - ja yrittää korvata akussa olevan tyhjän merkkijonon laskennan tuloksella.
Perl ei ole suinkaan ainoa kieli, joka tarjoaa monipuolisia tekstinkäsittelyominaisuuksia. Ohjelmointikielet REFAL , Icon ja Snobol tarjoavat mahdollisuuden hyödyntää täydellisemmin "kuvion täsmäytys" -ohjelmointimenetelmää , josta säännölliset lausekkeet ovat erikoistapaus.
On myös täydellinen UNIX-komentotulkki , joka perustuu Perl-kieleen. Sitä kutsutaan psh :ksi ja sen avulla voit sekoittaa tavallisen komentotulkin ja itse Perlin komentoja [52] .
Voit jopa kirjoittaa runoja Perlissä. Larry Wall mainitsi yhden näistä runoista nimeltä "Black Perl" ("Musta helmi" tai "Musta helmi") aprillipäivän kirjeessä Usenetille . Se kirjoitettiin alun perin Perl 3:lle, ja Larryn omin sanoin hän tunsi moraalista tyydytystä, kun runo epäonnistui Perl 5:n jäsentäjässä.
ENNEN PÄÄ: sulje ovi , jokainen ikkuna ja uloskäynti ; odota aikaa . _ avaa loitsukirja , opiskele , lue ( skannaa , valitse , kerro meille ); kirjoita se , tulosta heksadesimaali kukin kello , käännä sen pituus , kirjoita uudelleen ; _ _ tappaa hämähäkkejä , poputa niitä , pilkko , halkaise , tapa ne . irrota kädet , vaihda , odota ja kuuntele ( kuuntele , odota ), lajittele lauma ( sitten , varoita " vuohia" ja tappaa " lampaat " ); tappaa heidät , tyhjentää ahdistukset , moraaliset muutokset , arvot syrjään , jokainen ; _ kuole lammas ! kuolla kääntääksesi hyväksymäsi järjestelmän ( hylätä , kunnioittaa ) ; _ _ seuraava askel , tappaa seuraava uhri , jokainen uhraus , odota , tee rituaali uudelleen , kunnes "kaikki henget ovat tyytyväisiä" ; tee se ( "kuten sanotaan" ) . tee se ( * kaikkien *** täytyy *** osallistua *** *** kiellettyihin ** s * e * x * ) . _ palauta viimeinen uhri ; paketin runko ; poistu kryptasta ( aika , ajat & " puoli aikaa " ) & sulje se , valitse ( nopeasti ) ja varoita seuraavaa uhriasi ; JÄLKISANAT: älä kerro kenellekään , odota , odota aikaa ; odota ensi vuoteen , ensi vuosikymmeneen ; _ nuku , nuku , kuole itse , kuole vihdoinkin _Erityisesti Perl-kehittäjille wxWidgets -rajapintakirjastoa käyttäville Perl-kehittäjille sellainen avoin tuote kuin Padre IDE (lyhenne sanoista "Perl Application Development and Refactoring Environment" on kirjoitettu ) [53] .
Perl-tuki sisältyy monipuoliseen IDE ActiveState Komodoon ja sen avoimen lähdekoodin versioon Komodo Edit [54] . Eclipselle Perl -tuki toteutetaan EPIC [53] [55] -laajennuspaketina . Molemmat ympäristöt sisältävät muun muassa visuaalisen virheenkorjausohjelman [56] . IntelliJ IDEA ja muut JetBrains - tuotteet tukevat Perl5:tä Camelcade-nimisen avoimen lähdekoodin laajennuksen kautta .
Pearl-tuki muodossa tai toisessa on saatavilla useimmissa ohjelmoijien tekstieditoreissa, kuten cross-platform Vim [53] , Emacs [53] , SciTE [53] , Gedit [57] , Geany , jEdit [57] , Sublime Text , tai omistettu Windows Notepad++ :lle [53] [57] ja PSPadille sekä shareware - tuotteille, kuten IDM Computer Solutions, Inc :n UltraEdit & UEStudio. Mac OS : ssä TextMate [53] voi toimia sellaisena editorina .
Perl Editor, joka on osa DzSoftin [58] [59] [60] ohjelmoijien erikoistuneiden shareware-editorien sarjaa, on myös melko suosittu Windows-käyttäjien keskuudessa . Ilmainen editori Mastak Absolute Perl [61] oli melko tunnettu , mutta sen kehitys ja tuki on lopetettu, viimeisin versio on päivätty 29. syyskuuta 2003 [62] . Toinen kotimainen ilmainen perl-editori Windowsille on Perl Express [63] (uusin venäläisellä käyttöliittymällä varustettu versio 2.4.5, päivätty 2. joulukuuta 2005, englanninkielinen käyttöliittymä - 2.5, päivätty 23. joulukuuta 2005) [64] . Muita Perlille erikoistuneita kehitysympäristöjä ovat jakoohjelmisto IDE PerlBuilder [65] [66] [67] ja paikallinen editori Collie Perl Shell 2.0 [66] [68] .
Temaattiset sivustot | ||||
---|---|---|---|---|
Sanakirjat ja tietosanakirjat | ||||
|
Perl | |
---|---|
Ihmiset |
|
Asiat | |
Kehykset |
|
|
Ilmainen ja avoimen lähdekoodin ohjelmisto | |
---|---|
Pääasia |
|
Yhteisö |
|
Organisaatiot | |
Lisenssit | |
Ongelmia | |
muu |
|
|