Perl

**Perl** on Larry Wallin kehittämä tulkattava, proseduraalinen, skriptimäinen ohjelmointikieli. 

Kieli on monimuotoinen ja sen oppiminen on helppoa. Toisaalta sen ohjelmointitapojen moninaisuus ei pakota ohjelmoijaa ”siistiin” koodiin, joten Perl-nimen on myös vitsailtu tulevan sanoista ”Pathologically Eclectic Rubbish Lister”. Perlin nimeä pidetään joskus lyhenteenä sanoista *Practical Extraction and Report Language*, vaikka alun perin nimi ei ole akronyymi.Kielen nimi olikin aluksi Pearl, mutta samannimisen grafiikkaohjelman takia kielen nimi muuttui Perliksi.

Perlin syntaksissa on yhdistelty vaikutteita AWK:sta, sedistä, Shell-skripteistä, C-kielestä ja Lispistä. Kaikenlaiset säännölliset lausekkeet, esimerkiksi tekstinkäsittelyssä; data-analyysi; datan käsittely sekä modularisointi ovat helppoja Perlillä, minkä takia se onkin suosittu kieli myös Unix-ylläpitäjien keskuudessa. 
Perlin onkin sanottu olevan ohjelmointikieli, jolla helpot asiat ovat helppoja ja vaikeat mahdollisia. Kielessä on pyritty suureen ilmaisuvapauteen, ja ongelman voi ratkaista monella tavalla. Perliä on sanottu myös ”internetin roudarinteipiksi”.

Laajojen Perlillä kirjoitettujen ohjelmien vaikea ylläpidettävyys, yhdistettynä säännöllisten lausekkeiden ilmaisun tehokkuuteen, on tehnyt Perl-kieliset yhden rivin ohjelmat (*one-liners*) suosituiksi. Esimerkiksi seuraava ohjelma vaihtaa kaikista tiedostoista tekstin ”foo” muotoon ”bar”:


```perl
$ perl -p -i -e 's/foo/bar/g' *
```


## Suosio

Perl on ollut suosittu työkalu ylläpitäjien keskuudessa. 1990-luvun lopulta alkaen Perl oli erityisen suosittu WWW-ohjelmoijien työkaluna ja siihen on kehitetty joukko tätä tukevia kirjastoja (kuten CGI-rajapinta CGI.pm ja tietokantarajapinta DBI). Perl on suosittu kieli tiettyjen nopeaa prototyypitystä hyödyntävien yhteisöjen keskuudessa, esimerkiksi kielitieteessä ja bioinformatiikassa, varsinkin kun kielen oppiminen ja toimivan koodin kirjoittaminen on nopeaa uudellekin ohjelmoijalle. Perl-kielisillä ohjelmilla oli esimerkiksi merkittävä rooli ihmisen geeniperimää kartoittavassa Human Genome Project -hankkeessa .

## Historia

Larry Wall alkoi kehittää Perliä vuonna 1987 ja julkaisi version 1.0 comp.sources.misc-uutisryhmässä joulukuussa 1987. Kieli kasvoi nopeasti muutamina seuraavina vuosina. Perl 2 julkaistiin vuonna 1988, sisältäen parannellun säännöllisten lausekkeiden moottorin. Perl 3 julkaistiin vuotta myöhemmin ja siihen oli lisätty tuki binääriselle datalle.

Vuoteen 1991 asti ainoa dokumentaatio Perlille oli yksi ainoa manuaalisivu. Vuonna 1991 Programming Perl (”the Camel Book”) julkaistiin, ja samaan aikaan Perlin versionumero nousi neloseen, erottaakseen version, joka dokumentoitiin kirjassa.

Perl 4 kulki läpi monien päivitysten huipentuen versioon 4.036 vuonna 1993. Siinä vaiheessa Larry Wall jätti Perl 4:n ja rupesi työskentelemään Perl 5:n parissa.

Perl 5:n kehitys jatkui vuoteen 1994. Perl5-porters-sähköpostilista perustettiin toukokuussa 1994 Perlin kehitystä ja muille alustoille porttausta varten. Se pysyi merkittävimpänä keskustelupaikkana Perl 5:n kehitykselle ja porttaukselle.

Perl 5 julkaistiin 17. lokakuuta 1994. Se oli lähes kokonaan uudelleen kirjoitettu tulkki ja sisälsi monia uusia ominaisuuksia, sisältäen oliot, viittaukset, pakkaukset ja moduulit. Moduulit tarjosivat tavan laajentaa kieltä muuttamatta tulkkia.

Lokakuun 26. päivänä 1995 perustettiin Comprehensive Perl Archive Network. CPAN on kokoelma web-sivuja, jotka varastoivat Perl-koodia, binäärejä, dokumentaatiota, skriptejä ja moduuleja. Alun perin jokaiselle CPAN-sivulle piti mennä oman URL-osoitteen avulla; nykyään yksi URL vie CPAN sivulle: http://cpan.org.

Vielä 2010-luvulla Perl 5:tä kehitettiin aktiivisesti. Nykyään se sisältää tuen Unicodelle.

Perl 6:n kehitys alkoi kesällä 2000 kun Larry Wall ilmoitti siitä Perl-konferenssissa. Vuonna 2001 päätettiin, että Perl 6 ajetaan Parrot-nimisen virtuaalikoneen päällä. Vuonna 2010 molempia, Perl 6:ta ja Parrotia, kehitetään aktiivisesti.
Lokakuussa 2019 Perl 6 sai uuden nimen Raku. Syynä nimen vaihdokseen on, että kielet ovat erilaiset vaikkakin niillä on yhteys, ja Perlillä yleensä tarkoitetaan aiempia Perlin versioita.

## Kielen ominaisuuksia

Perlin yleinen rakenne periytyy C-kielestä. Perl on rakenteellinen ohjelmointikieli, joka sisältää muuttujia, lausekkeita, aaltosulkein erotettuja lohkoja, kontrollirakenteita ja aliohjelmia.

Perliin on otettu ominaisuuksia myös Shell-ohjelmoinnista. Kaikki nykyiset (Perl 5 -) ohjelmat tulkataan. Koska muuttujien nimien edessä on tietyt merkit [<sup>[1]</sup>](https://fi.wikipedia.org/wiki/Perl), niitä voi helposti sisällyttää merkkijonoihin. Kuten Unixin shellissä, myös Perlissä on sisäänrakennettuja funktioita yleisille tehtäville, kuten järjestämiselle ja järjestelmän palveluiden käyttöön.

Perl lainaa assosiatiiviset taulukot AWK:sta ja säännölliset lausekkeet Sedistä. Ne helpottavat ja selventävät jäsennystä ja tekstin käsittelyä.

Perl 5:een on lisätty moninaisia tietorakenteita ja oliopohjainen ohjelmointimalli, joihin sisältyvät viittaukset, paketit ja oliopohjaisen metodien suorittamisen. Lisäksi Perl 5:een lisättiin muuttujien näkyvyysalueet, jotka helpottavat selkeän koodin kirjoittamista.

Kaikki Perlin versiot hoitavat automaattisesti datan tyypityksen ja muistin hallinnan. Tulkki tuntee objektin tyypin ja sen tarvitseman muistin määrän; se varaa tai vapauttaa muistia silloin, kun se on tarpeellista. Lailliset tyyppimuunnokset tehdään automaattisesti suorituksen aikana, ja laittomat aiheuttavat käännösvirheen. Perlissä ei ole mahdollista aiheuttaa muistivuotoa, kaataa tulkkia tai sekoittaa sisäistä datan esitystä.

## Datatyypit

Perlin tyyppijärjestelmässä on kolme sisäänrakennettua datatyyppiä: skalaarit, taulukot ja hajautustaulut (*hashes*). Skalaari sisältää yhden arvon, kuten numeron, tekstiä tai viittauksen. Taulukot ovat skalaareiden järjestettyjä listoja, jotka on indeksoitu alkaen numerosta 0. Hajautustaulut ovat assosiatiivisia, järjestämättömiä taulukoita, jotka sisältävät skalaareja ja jotka on indeksoitu avaimen avulla.

Skalaarit, taulukot ja hajautustaulut voidaan liittää nimettyihin muuttujiin. Muuttujan ensimmäinen merkki ($, % tai @) kuvaa muuttujan sisältämää datatyyppiä. Loppuosa on muuttujan nimeä.

Skalaarin nimi alkaa aina merkillä ”$”, vaikka muuttuja kuuluisi taulukkoon tai hajautustauluun:


```perl
$kuukaudet[11]        # @kuukaudet-taulukon kahdestoista elementti
 $osoitteet{'Pekka'}   # %osoitteet-hajautustaulun 'Pekka'-elementti
```


Taulukot alkavat ”@”-merkillä…


```perl
@kuukaudet = ("tammikuu", "helmikuu");
 $toinen = $kuukaudet[1]; # $toinen = helmikuu
 $maara = @kuukaudet;     # $maara = 2
```


… ja hajautustaulukot puolestaan ”%”-merkillä.


```perl
%kuukaudet = (
     "ensimmäinen" => "tammikuu", 
     "toinen"      => "helmikuu",
     "kolmas"      => "maaliskuu"
 );
 $toinen = $kuukaudet{ "toinen" }; # $toinen = helmikuu
```


## Esimerkki
Tiedosto *hello.pl*:

```perl
#!/usr/bin/perl -w
 use strict;
 my $w = "world";
 my $h = "Hello $w!\n";
 print $h;
```


Ensimmäisellä rivillä kerrotaan Unix-järjestelmälle (ks. shebang), että ohjelma ajetaan
`/usr/bin/perl`-ohjelmalla.

Toisella rivillä määritellään käyttöön tiukka syntaksi, eli kolmannen ja neljännen rivin muuttujat on pakko määritellä käyttäen avainsanaa *my* tai *our*.

Neljännellä rivillä muuttuja `$w` *interpoloidaan* muuttujaan `$h`, joka tulostetaan rivillä viisi.

Jos tiedostolla on suoritusoikeudet (`chmod +x hello.pl`), se voidaan ajaa suoraan:

```
$ ./hello.pl
 Hello world!
```


Muuten käytetään Perl-tulkkia:

```
$ perl hello.pl
 Hello world!
```


## Katso myös
* Plain Old Documentation – Perlissä käytettävä dokumentointitapa
* CPAN – Comprehensive Perl Archive Network http://cpan.org
* Perl 6 – Perlin seuraava versio

## Lähteet

## Aiheesta muualla

* Jukka Korpela: suomenkielisiä Perl-aiheisia linkkejä
*  Perlin historiaa
*  Modern Perl  Ilmaiseksi ladattava kirja Perl-ohjelmoinnista
*  Higher-Order Perl Ilmaiseksi ladattava kirja Perlin kehittyneiden ominaisuuksien käytöstä