PERL(1)

NIMI
perl - Practical Extraction and Report Language

YLEISKATSAUS
perl    [ -sTuU ]
    [ -hv ] [ -V[:konfigurointumuuttuja] ]
    [ -cw ] [ -d[:debuggeri] ] [ -D[numero/lista] ]
    [ -pna ] [ -Fpattern ] [ -l[oktaali] ] [ -0[oktaali] ]
    [ -Ihak ] [ -m[-]moduli ] [ -M[-]'moduli...' ]
    [ -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    Perl tietorakenteet
    perlsyn     Perl syntaksi
    perlop      Perl operaattorit ja presedenssi
    perlre      Perl säännölliset lausekkeet
    perlrun     Perlin suoritus ja optiot
    perlfunc    Perlin sisäänrakennetut funktiot
    perlvar     Perlin ennaltamääritellyt muuttujat
    perlsub     Perl aliohjelmat
    perlmod     Perl modulit: miten ne toimivat
    perlmodlib  Perl modulit: 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   Perl 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 moduleista 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-moduleista.

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 moduleista. Saatat tällöin haluta korvata man-ohjelmasi jollain toisella vastaavalla.

Jos jotain 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 teksitiedostojen 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 tarvittaesa 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 tieoturvariskien 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: 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. Uusi yacc kielioppi on puolet vanhemman koosta. Montaa 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. 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). 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. Perl kirjasto on nyt määritelty modulein, jotka voidaan helposti jakaa eri pakkausten kesken. Pakkaus voi valinnan mukaan joko lukea osan modulin ulosnäkyvästä rajapinnasta tai kokonaan. Pragmat (so. kääntäjän toimintaohjeet) ovat sekä määritelty että käytössä saman mekanismin kautta. Pakkaus voi toimia luokkana. Dynaaminen moniperintä ja virtuaalimetodit on mahdollista suoraviivaisella tavalla ilman suurempia lisäyksiä syntaksiin. Tiedostokahvoja voidaan käsitellä nyt objekteina. 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 modulien latausta, ja Perlistä itsestään voidaan tehdä dynaaminen kirjasto. Suurempi uusi moduli on POSIX-moduli, joka tarjoaa pääsyn kaikkiin saatavilla oleviin POSIX-rutiineihin ja määrittelyihin, myös objektiluokkien kautta sopivissa tapauksissa. 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. 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. Oikeastaan mekamismi AUTOLOAD sallii mielivaltaisen semantiikan määrittelyn määrittelemättömille aliohjelmakutsuille. Sitä voi käyttää muuhunkin kuin vain automaattiseen lataamiseen. 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. The Comprehensive Perl Archive Network (CPAN) mikä on kuvattu man-sivulla perlmodlib sisältää satoja plug-and-play moduleita, täynnä uudelleenkäytettävää koodia. Katso http://www.perl.com/CPAN löytääksesi ftp-siten läheltä itseäsi. 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@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@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 mikä 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@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.

KATSO MYÖS