Kirjoittaja: Metabolix (19.12.2009)
Perl on Unix-maailmassa laajalti käytetty skriptikieli, joka kehitettiin alunperin helpottamaan tekstinkäsittelyä mutta soveltuu nykyään kaikenlaiseen ohjelmointiin. Perl 5 tukee proseduraalisen ohjelmoinnin lisäksi olio-ohjelmointia ja funktionaalista ohjelmointia, ja siihen on laajan standardikirjaston lisäksi suuri määrä irrallisiakin moduuleja.
Tekstiä voi tulostaa komennolla print
. Merkintä "\n" tarkoittaa rivinvaihtoa.
print "Koska meillä on joulu?\n"; print "Ei taida aivan huomenna olla!\n";
Perlissä asiat voi tehdä erittäin monella tavalla. Seuraava esimerkki laskee Fibonaccin lukuja taulukkoon niin, että uusi luku lisätään aina taulukon alkuun.
#!/usr/bin/perl # Aloitetaan tunnetuista luvuista. @luvut = (1, 0); # Toistetaan, kunnes saadaan sataa suurempi luku. while ($luvut[0] < 100) { # Lisätään alkuun uusi luku; se on kahden ensimmäisen summa. unshift(@luvut, $luvut[0] + $luvut[1]); } # Käännetään lista (reverse), yhdistetään arvot (join) ja tulostetaan. print join(", ", reverse(@luvut)), "\n";
Perl on kuuluisa monipuolisista säännöllisistä lausekkeistaan. Monissa muissa kielissä niiden käyttöön tarvitaan funktioita tai muuta erityistä, mutta Perlissä syntaksi on paljon lyhyempi. Perlin säännöllisiin lausekkeisiin voi sisällyttää kokonaisia ohjelmia, mutta myös aivan yksinkertaiset toiminnot onnistuvat. Seuraava skripti nimeää tiedostoja uudelleen säännöllisen lausekkeen avulla.
#!/usr/bin/perl # Siirretään lausekkeet parametritaulukosta lauseketaulukkoon. # Sovitaan, että kaksoispiste erottaa lausekkeet tiedostonimistä. @lausekkeet = (); while (@ARGV) { # Jos parametri on ":", lopetetaan, muuten lisätään se lausekkeisiin. $parametri = shift(@ARGV); last if $parametri eq ":"; push(@lausekkeet, $parametri); } # Jos lausekkeet tai tiedostonimet puuttuvat, tulostetaan ohje ja lopetetaan. if (!@lausekkeet or !@ARGV) { print "Toiminta: $0 lausekkeet : tiedostot\n"; print "Esimerkki: $0 's/([0-9]+)/00$1/' 's/0*([0-9]{3})/$1/' : kuva*.png\n"; exit(1); } # Käydään loput parametrit läpi. foreach $nimi (@ARGV) { # Jos tiedostoa ei ole, ohitetaan se. if (not -e $nimi) { print "Tiedostoa '$nimi' ei ole!\n"; next; } # Korvaus on helpointa tehdä muuttujan $_ kautta; säännölliset # lausekkeet käsittelevät tavallisesti tätä, ellei muuta määrätä. $_ = $nimi; # Ajetaan kaikki lausekkeet; virhetilanteessa lopetetaan suoritus. foreach $lauseke (@lausekkeet) { eval $lauseke; die $@ if $@; } # Otetaan tulos talteen. $uusi = $_; # Siirretään tiedosto, paitsi jos uusi nimi on sama kuin alkuperäinen. rename($nimi, $uusi) unless $nimi eq $uusi; }
Esimerkiksi numeroitujen kuvien tiedostonimien numeromäärän voi tasata niin, että ensin lisää ylimääräisiä nollia eteen ja sitten poistaa yli kolmen numeron sarjoista nollat alusta.
perl nimea.pl 's/([0-9]+)/00$1/' 's/0*([0-9]{3})/$1/' : kuva*.png # Esim. kuva_1.png -> kuva_001.png # Esim. kuva_0002.png -> kuva_002.png # Esim. kuva_12.png -> kuva_012.png # Esim. kuva_3982.png ei muutu.
Perl-ohjelmointia käsittelevä kirja Programming Perl alkaa näin: "Perl is a language for getting your job done." (Vapaa käännös: "Perl on kieli, jolla homma hoituu.") Kielen tavoitteena onkin, että kaikenlaiset asiat onnistuvat – helpot asiat helposti ja vaikeat edes jotenkin.
Perlin syntaksi on usein sotkuinen, eikä siitä ole edes kirjoitettu standardia; on vain yksi Perl-tulkki, ja sen ominaisuudet määräävät, mitä Perl tällä hetkellä sisältää. Aina Perlin toiminta ei ole loogista: esimerkiksi monet funktiot toimivat sekä taulukoiden että lukujen kanssa mutta tekevätkin aivan eri asioita. Perlin ohjesivulla mainitaan funktioista näin: "In general, they do what you want, unless you want consistency." (Vapaa käännös: "Yleensä ne toimivat toivotusti, paitsi jos toivotaan yhdenmukaisuutta.")