Perl

Perl, Practical Extraction and Report Language, er eit programmeringsspråk som vart lansert av Larry Wall 18. desember 1987. Språket låner mykje av funksjonaliteten frå for eksempel C, sed, awk, sh og (i mindre grad) frå mange andre programmeringsspråk.

Filosofi 
Perl vart laga for å vera eit praktisk språk for å hente ut informasjon frå tekstfiler, og for å nyttegjere seg av denne informasjonen. Eit av mottoa er «There's more than one way to do it» (TMTOWTDI – uttalest «Tim Toady»), som direkte oversett til norsk tyder «det er meir enn éin måte å gjera det på». Eit av måla med språket var å gjera enkle oppgåver enkle å løyse, og vanskelege oppgåver moglege å løysa.

Perl har direkte støtte for regulære uttrykk i syntaksen, og språket er ofte sett på som det typiske skriptspråket, og har vorte kalla «limet som held webben saman» på grunn av populariteten språket har blant «CGI-språk».

Noverande versjon 
Den noverande versjonen, 5.8.6, som vart lansert 27. november 2004, har mellom anna støtte for Unicode. Neste versjon, Perl 6, er under utvikling, og han vil ta i bruk Parrot, ei virtuell maskin som blir utvikla med tanke på å støtte fleire programmeringsspråk.

Innebygde datatypar 
Perl har tre innebygde datatypar:

 Skalarer eller Integers som dei vert kalla på engelsk kan halde ein enkelt verdi, f.eks. ein tekststreng, eit nummer eller ein referanse.
 Lister eller arrays kan halde fleire skalarar basert på ein indeks (som startar ved posisjon 0).
 Assosiative lister, eller hashar, er uordna samlingar sett saman av skalarar som er indeksert på basis av den assosierte nøkkelen.

Skalarer, lister og hasher kan tilordnes namngjevne variablar. Det første teiknet i variabelnamnet oppgjer kva datatype det er snakk om. Resten identifiserer verdien som variabelen har.

Skalarar startar alltid med «$», sjølv om den refererande variabelen høyrer til ei liste eller ein hash:

 $maanader[11]         # det 12. elementet i lista @maanader
 $adresse{'Per'}       # elementet med nøkkelen 'Per' i hashen %adresse

Lister vert namngjevne med «@» som første teikn, som fortell at meir enn éin verdi vil verte returnert:

 @maanader             # ( $maanader[0], $maanader[1], ..., $maanader[n] )
 @maanader[2,3,4]      # same som ( $maanader[2], $maanader[3], $maanader[4] )
 @adresse{'Per','Ola'} # same som ( $adresse{'Per'}, $adresse{'Ola'} )

Assosiative lister, hashar, startar med «%» (som i %adresse ovanfor).

Eksempel

Hallo Wikipedia! 
 #!/usr/bin/perl -w
 
 print "Hallo Wikipedia!\n";

Lykkjer 
 while ( uttrykk ) {
     ...
 }

 do {
     ...
 } while ( uttrykk );

 do {
     ...
 } until ( uttrykk );

 for ( initialisering ; termineringsbetingelse ; økningsgrad ) {
     ...
 }

 foreach ( liste ) {
     ...
 }

 for ( liste ) {
     ...
 }

Val 
 if ( uttrykk ) {
     ...
 }

 unless ( uttrykk ) {
     ...
 }

 if ( uttrykk ) {
     ...
 }
 else {
     ...
 }

 if ( uttrykk ) {
     ...
 }
 elsif ( uttrykk ) {
     ...
 }
 else {
     ...
 }

Subrutiner 
Subrutiner vert spesifiserte med nøkkelordet sub. Variablar til subrutina vert representerte som element i den lokale (for subrutina) lista @_. Kallar ein ei subrutine med tre argument, vert desse representerte som @_[0], @_[1] og @_[2] i subrutina. Merk at desse elementa vert referert til som skalarane $_[0], $_[1] og $_[2]. Funksjonen shift kan også nyttast for å få tak i kvar av verdiane.

Endrest nokon av elementa i @_ i subrutinene, reflekterest også denne endringen i programmet som kalla subrutina.

Subrutiner returner vanlegvis resultatet av det siste uttrykket, men ein eksplisitt return-verdi kan verte oppgjeven og foreslegen for å gjera det heilt klart kva programmeraren faktisk ynskjer å returnere.

Eksempel:

 sub kube {
     my $x = shift;
     return $x ** 3;
 }
 
 $z = -4;
 $y = kube($z);
 print "$y\n";

Namngjevne argument kan simulerest ved å gi subrutina ein hash som innargument:

 sub hallo {
     my %person = @_;
     return "Hallo, $person{fornamn} $person{etternamn}!\n";
 }
 
 print hallo (
     fornamn   => 'Ola',
     etternamn => 'Nordmann',
 );

Perl og databasar 
Forskjellige DBI/DBD-modular kan nyttast for å få tilgang til dei fleste ANSI SQL-databasar, som f.eks. MySQL, PostgreSQL og Oracle.

Bakgrunnsstoff 
 http://www.perl.org/
 http://www.perl.com/
 http://use.perl.org/ 
 Perl-6-FAQ

Fri programvare
Perl