NIMI
perl − Practical Extraction and Report Language (Käytännöllinen poiminta- ja raportointikieli)
YLEISKATSAUS
perl |
[ −sTuU ] | ||
[ −hv ] [ −V[:konfigurointumuuttuja] ] | |||
[ −cw ] [ −d[:debuggeri] ] [ −D[numero/lista] ] | |||
[ −pna ] [ −Fkuvio ] [ −l[oktaali] ] [ −0[oktaali] ] | |||
[ −Ihak ] [ −m[−]moduuli ] [ −M[−]’moduuli...’ ] | |||
[ −P ] | |||
[ −S ] | |||
[ −x[hak] ] | |||
[ −i[laajennos] ] | |||
[ −e ’komento’ ] [ -- ] [ ohjelmatiedosto ] [ argumentti ]... |
Käytön helpottamiseksi Perl-manuaali on jaettu useisiin eri osiin:
perl Yleiskatsaus Perliin (tämä man-sivu) perldelta Edellisen Perl-version jälkeen tulleita muutoksia perlfaq Yleisimmät Perlistä esitetyt kysymykset perldata Perlin tietorakenteet perlsyn Perlin syntaksi perlop Perlin operaattorit ja presedenssi perlre Perlin säännölliset lausekkeet perlrun Perlin suoritus ja optiot perlfunc Perlin sisäänrakennetut funktiot perlvar Perlin ennaltamääritellyt muuttujat perlsub Perlin aliohjelmat perlmod Perlin moduulit: miten ne toimivat perlmodlib Perlin moduulit: niiden kirjoittaminen ja käyttäminen perlform Tekstinmuotoilu Perlillä perllocale Perlin locale-tuki perlref Perlin viitteet perldsc Perlin tietorakenteet: esittely perllol Perlin tietorakenteet: lista listoista perltoot Perlin OOP-opas perlobj Perlin objektit perltie Perlin objektit peitettyinä yksinkertaisten muuttujien alle perlbot OOP-esimerkkejä ja -niksejä Perlillä perlipc Prosessien välinen kommunikointi Perlillä perldebug Virheenetsintä Perlillä (debuggaus) perldiag Perlin diagnostiikkaviestit perlsec Turvallisuus Perlissä perltrap Mitä sudenkuoppia Perlissä on noviiseille perlstyle Perlin tyyliopas perlpod Perl POD (Plain Old Documentation) perlbook Tietoa Perl-kirjasta perlembed Miten upottaa Perliä C/C++ -ohjelmiisi perlapio Perlin sisäinen IO-abstraktiorajapinta perlxs Perlin XS API (sovellusohjelmarajapinta) perlxstut Perlin XS-opas perlguts Perlin sisäiset funktiot laajennosten tekijöille perlcall Kuinka kutsua Perliä C-ohjelmista
(Jos luet näitä ensimmäistä kertaa ja aiot käydä kaikki lävitse, ylläehdotetun lukujärjestyksen pitäisi olla mukavin ohjeissa olevien viitteiden kannalta.)
Oletusarvoisesti kaikki ylläolevat ohjesivut ovat asennettuina hakemistoon /usr/local/man/.
Perlin moduuleista on olemassa laajalti lisää dokumentteja. Perlin oletusarvoinen konfiguraatio asettaa nämä lisädokumentit hakemistoon /usr/local/lib/perl5/man (tai man-alihakemistoon Perlin kirjastohakemiston alle). Osa tästä dokumentaatiosta on vakiona mukana Perl-jakelupaketissa, mutta löydät sieltä dokumentteja myös muista Perl-moduuleista.
Sinun pitäisi kyetä lukemaan Perlin dokumentteja man(1) -ohjelmallasi lisäämällä sopivat hakemistot niille asianmukaisiin käynnistystiedostoihin tai MANPATH-ympäristömuuttujaan. Katsoaksesi mihin Perl-konfiguraatiosi asensi ohjesivut, kirjoita:
perl -V:man.dir
Jos hakemistoilla on sama juurihakemisto, kuten /usr/local/man/man1 ja /usr/local/man/man3, sinun täytyy lisätä vain se juurihakemisto (/usr/local/man) man(1) -konfiguraatiotiedostoihisi tai MANPATH-ympäristömuuttujaasi. Muutoin sinun pitää lisätä molemmat juurihakemistot.
Jos edellämainittu ei jostain syystä toimi, voit yhä käyttää mukana tulevaa skriptiä perldoc katsoaksesi tietoja moduuleista. Saatat tällöin haluta korvata man-ohjelmasi jollain toisella vastaavalla.
Jos ohjelmassasi on jokin omituinen vika etkä tiedä mistä etsisit apua, kokeile ensiksi kuitenkin valitsinta -w. Se näyttää usein tarkan ongelmakohdan paikan.
KUVAUS
Perl on kieli, joka on optimoitu mielivaltaisten tekstitiedostojen läpikäymiseen, niissä olevan tiedon keruuseen sekä raporttien tulostamiseen em. tietojen perusteella. Se on myös hyvä kieli monien järjestelmän ylläpidossa käytettävien tehtävien hoitamiseen. Kieli on ennemmin suunniteltu käytännölliseksi (helppo käyttää, tehokas, valmis) kuin kauniiksi (pieni, elegantti, minimaalinen).
Perl yhdistää (no, ainakin tekijän mielestä) jotkin C:n, sed:in, awk:in sekä sh:n parhaista ominaisuuksista (Kielihistorioitsijat mainitsevat myös jotkin muunnelmat kielistä csh, Pascal sekä jopa BASIC−PLUS). Näin ollen em. kieliä tuntevien ihmisten pitäisi omaksua Perl helpohkosti. Lausekesyntaksi muistuttaa paljolti C:n vastaavaa. Toisin kuin useimmat Unix-työkalut, Perl ei aseta rajoituksia tietorakenteidesi koolle; jos vain muisti riittää, Perl voi lukea kokonaisen tiedoston yhteen ainoaan merkkijonoon. Rekursiolla ei ole syvyysrajoituksia. Lisäksi hajautustaulut (ennen tunnetut nimellä "assosiatiiviset taulukot") kasvavat tarvittaessa estääkseen suorituskyvyn heikkenemisen. Perl käyttää kehittyneitä merkkijonontunnistustekniikoita käydäkseen lävitse suuria määriä tietoa hyvin nopeasti. Vaikka Perl onkin optimoitu tekstidatan lukemiseen, se voi käsitellä myös binääridataa sekä saa tarvittaessa näyttämään dbm-tiedostot hajautustauluilta. Setuid Perl -skriptit ovat turvallisempia kuin C-ohjelmat tietovuon jäljitysmekanismin ansiosta, mikä estää monien typerien tietoturvariskien syntymisen.
Jos sinulla on ongelma, jonka ratkaisemiseen käyttäisit tavallisesti sed:iä, awk:ia tai sh:ta, mutta nämä eivät tarjoa riittäviä keinoja sen ratkaisemiseen - tai ohjelman pitää toimia hieman nopeammin etkä halua kirjoittaa mokomaa C:llä - Perl voi olla juuri sopiva. Myös sed- sekä awk-skriptit voidaan muuttaa Perl-skripteiksi tätä varten kehitetyllä ohjelmalla.
Mutta ei tässä vielä kaikki...
Perl-versio 5
on kirjoitettu lähes täysin uudestaan ja tarjoaa
seuraavat lisäedut:
• Monia uusia käytettävyyslaajennoksia
Nyt on mahdollista kirjoittaa paljon luettavampaa Perl-koodia (jopa säännöllisten lausekkeiden sisällä). Ennen niin kryptiset Perlin sisäiset muuttujanimet voidaan korvata helpommin muistettavilla tunnuksilla. Virheviestit ovat informatiivisempia ja valinnaiset varoitukset poimivat monet niistä virheistä, joita aloittelijat saattavat tehdä. Seuraavaa ei voikaan korostaa liikaa: Aina kun ohjelmasi käyttäytyy oudosti, koeta −w valitsinta!!! Aina kun ohjelmasi ei käyttäydy omituisesti, koeta kuitenkin valitsinta −w.
• Yksinkertaistettu syntaksi
Uusi yacc-kielioppi on puolet vanhemman koosta. Monta mielivaltaista kielioppisääntöä on nyt säännönmukaistettu. Varattujen sanojen määrä on leikattu kolmannekseen. Tästä huolimatta lähes kaikki vanhat Perl-skriptit toimivat ilman tarvetta muutoksiin.
• Leksikaalinen näkyvyys
Perl-muuttujat voidaan esitellä nyt leksikaalisen näkyvyysalueen sisällä, kuten "auto"-muuttujat C:ssä. Tämä on paitsi tehokkaampaa, tarjoaa myös paremmat mahdollisuudet tehdä "suuren mittakaavan ohjelmia" nimiavaruuden yksityisyyden kautta. Nimettömät aliohjelmat tuovat esille leksikaalisten muuttujien syvän bindauksen (closures).
• Mielivaltaisesti lomitetut tietorakenteet
Mikä tahansa skalaariarvo, mukaanlukien mikä hyvänsä taulukkoelementti, voi sisältää viitteen mihin tahansa toiseen muuttujaan tai aliohjelmaan. Voit helposti luoda nimettömiä muuttujia ja aliohjelmia. Perl pitää huolta viitteiden laskemisesta.
• Modulaarisuus ja uudelleenkäytettävyys
Perl-kirjasto on nyt määritelty moduulein, jotka voidaan helposti jakaa eri pakkausten kesken. Pakkaus voi valinnan mukaan joko lukea osan moduulin ulosnäkyvästä rajapinnasta tai kokonaan. Pragmat (so. kääntäjän toimintaohjeet) ovat sekä määritelty että käytössä saman mekanismin kautta.
• Oliopohjainen ohjelmointi
Pakkaus voi toimia luokkana. Dynaaminen moniperintä ja virtuaalimetodit on mahdollista suoraviivaisella tavalla ilman suurempia lisäyksiä syntaksiin. Tiedostokahvoja voidaan käsitellä nyt objekteina.
• Upotettava ja laajennettava
Nyt Perliä voidaan helposti upottaa C- tai C ++ -ohjelmiin, sekä kutsua tai tulla kutsutuiksi ohjelmistasi hyvin dokumentoidun käyttöliittymän kautta. XS -esiprosessori on mukana, jotta voisit helposti liimata tekemäsi C- tai C ++ -rutiinit Perliin. Perl tukee dynaamista moduulien latausta, ja Perlistä itsestään voidaan tehdä dynaaminen kirjasto.
• POSIX -vastaava
Suurempi uusi moduuli on POSIX -moduuli, joka tarjoaa pääsyn kaikkiin saatavilla oleviin POSIX -rutiineihin ja määrittelyihin, myös objektiluokkien kautta sopivissa tapauksissa.
• Pakettien rakentajat ja purkajat
Uudet BEGIN - ja END -lohkot mahdollistavat ohjelman kontrollin haltuunottamisen paketin käännösvaiheessa sekä ohjelman suorittamisen loputtua. Yksinkertaisemmassa tapauksessa BEGIN ja END toimivat kuten awk:issa, kun käytät valitsimia −p tai −n.
• Monta samanaikaista DBM -toteutusta
Perlillä tehty ohjelma voi nyt käsitellä DBM -, NDBM -, SDBM -, GDBM - sekä Berkeley DB -tietokantoja samasta skriptistä samanaikaisesti. Itse asiassa vanhaa dbmopen-rajapintaa on tehty yleiskäyttöisemmäksi siten, että mikä tahansa muuttuja voidaan sitoa objektiluokkaan, mikä määrittelee sen käyttörajapinnan.
• Aliohjelman määrittelyt voidaan ladata automaattisesti
Oikeastaan mekamismi AUTOLOAD sallii mielivaltaisen semantiikan määrittelyn määrittelemättömille aliohjelmakutsuille. Sitä voi käyttää muuhunkin kuin vain automaattiseen lataamiseen.
• Laajennoksia säännöllisiin lausekkeisiin
Nyt voit määritellä kvantisaattoreita, jotka eivät vastaa merkkejä niin pitkälle kuin mahdollista (non-greedy quantifiers). Voit myös ryhmitellä kvantisaattoreita ilman, että ne luovat takautuvia viitteitä. Säännöllisiin lausekkeisiin voidaan lisätä lukemista selkeyttäviä välilyöntejä ja kommentteja. Johdonmukainen laajennettavuusmekanismi lisättiin säännöllisiin lausekkeisiin, jotta saavutettaisiin ylöspäin yhteensopivuus vanhoihin säännöllisiin lausekkeisiin.
• Lukematon määrä lisämoduuleja
The Comprehensive Perl Archive Network (CPAN), joka on kuvattu man-sivulla perlmodlib sisältää satoja plug-and-play moduuleita, täynnä uudelleenkäytettävää koodia. Katso http://www.perl.com/ CPAN löytääksesi ftp-palvelimen läheltä itseäsi.
• Käännettävyys
Toimiva Perlistä C:hen -kääntäjä on jo olemassa, joskaan se ei ole vielä sovelias tuotantokäyttöön. Se luo portattavaa byte-koodia, yksinkertaista C:tä tai optimoitua C-koodia.
Noih, yllä oli varmaan riittävästi hypeä...
YMPÄRISTÖMUUTTUJAT
Katso man-sivu perlrun.
TEKIJÄ
Larry Wall <larry [AT] wall.org>, jossain määrin muilta saatujen vinkkien avittamana.
Jos omat Perl-menestystarinasi tai todistuksesi voivat auttaa muita edistämään Perlin mainetta sovellusten kehittämisessä (tai jos vain haluat yksinkertaisesti ilmaista kiitollisuutesi Larrylle ja muille Perlin tekijöille), ole hyvä ja lähetä sähköpostia osoitteeseen <perl-thanks [AT] perl.org>.
TIEDOSTOT
"/tmp/perl-e$$" Väliaikaistiedostot valitsimella -e ajetuille komennoille "@INC" Perl-kirjastojen hakupolut
DIAGNOSTIIKKA
Valitsin −w kertoo kaikkea kivaa diagnostiikkaa.
Man-sivulta perldiag saat kattavan dokumentaation Perl-diagnostiikasta.
Käännösvirheet kertovat millä rivillä virhe on, kuin myös seuraavan tokenin tai token-tyypin, joka olisi tutkittu seuraavaksi (Jos skripti välitettiin Perlille valitsimen −e kautta, jokainen −e lasketaan yhdeksi riviksi).
Setuid-skriptit käsittävät lisärajoituksia, jotka voivat aiheuttaa virheviestejä tyyliin "Insecure dependency". Ks. man-sivu perlsec.
Sanoimmeko jo, että sinun pitäisi ehdottomasti harkita -w valitsimen käyttöönotttoa?
BUGIT
Valitsin −w ei ole pakollinen
Perl on täysin tietokonearkkitehtuuristasi johtuvien määrityksien armoilla, mitä tulee erilaisiin operaatiohin, kuten tyyppimuunnoksiin, atof() sekä liukulukutulostukseen funktiolla sprintf().
Jos vakiotulosteesi vaatii haun (seek) tai tiedoston lopetusmerkin (EOF) lukemisen ja kirjoittamisen välillä, niin Perl vaatii myös ( tämä ei päde funktioihin sysread() ja syswrite()).
Vaikka millään sisäänrakennetulla tietotyypillä ei ole mitään mielivaltaisia kokorajoituksia (poislukien muistin määrä), joitain mielivaltaisia rajoituksia kuitenkin on: muuttujan nimi ei saa olla pidempi kuin 255 merkkiä, eikä mikään polun (PATH) komponentti saa olla pidempi kuin 255 merkkiä, jos käytät valitsinta -S. Säännöllinen lauseke ei saa olla käännöksen jälkeen sisäisesti suurempi kuin 32767 tavua.
Bugiraportit voi lähettää osoitteeseen (huomaa sisällyttää mukaan täysi konfigurointi-informaatio siten kuin perl-lähdekoodipaketin mukana tuleva myconfig-ohjelma tulostaa, tai perl -V) <perlbug [AT] perl.com>. Jos onnistuit kääntämään perlin, voit käyttää apunasi utils/ -alihakemiston alla olevaa perlbug-ohjelmaa bugiraportin lähettämisessä sähköpostitse.
Perl tulee oikeasti sanoista Pathologically Eclectic Rubbish Lister, mutta älä kerro kenellekään, että sanoin sen sinulle.
MERKINNÄT
Perlin motto kuuluu "Tapoja on olemassa enemmän kuin yksi" ("There’s More Than One Way To Do It", TMTOWTDI). Näiden tapojen lukumäärän selvittäminen jätetään lukijalle harjoitustehtäväksi.
Kolme tärkeintä ohjelmoijan lahjakkuutta ovat Laiskuus, Kärsimättömyys ja Kunnianhimo. Katso Kamelikirjasta miksi.