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.

Versjonen, 5.8.6, som vart lansert 27. november 2004, har mellom anna støtte for Unicode.
## Filosofi
Perl vart laga for å vera eit praktisk språk for å hente ut informasjon frå tekstfiler, og for å nyttegjera seg av denne informasjonen. Eit av mottoa er «There's more than one way to do it» (TMTOWTDI – vert uttala «Tim Toady»), som direkte omsett 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øyse.

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».

## Innebygde datatypar
Perl har tre innebygde datatypar:

* *Skalarar* 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 *[[hash]]ar*, er uordna samlingar av par av skalarar — den fyrste i kvart par, *nykelen*, kan brukast for å få tilgang til den andre.

Skalarar, lister og hashar kan tilordnast namngjevne variablar. Det fyrste teiknet i variabelnamnet oppgjev 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 nykelen 'Per' i hashen %adresse

Lister vert namngjevne med «@» som det fyrste teiknet, som fortel 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 {
     ...
 }

### Subrutinar
subrutinar vert spesifiserte med nykelordet `sub`. Variablar til subrutinen vert representerte som element i den lokale (for subrutinen) lista `@_`. Kallar ein ein subrutine med tre argument, vert desse representerte som `@_[0]`, `@_[1]` og `@_[2]` i subrutinen. Merk at desse elementa vert refererte til som skalarane `$_[0]`, `$_[1]` og `$_[2]`. Funksjonen `shift` kan også nyttast for å få tak i kvar av verdiane.

Om nokon av elementa i `@_` i subrutinane vert endra, vert også denne endringa reflektert i programmet som kalla subrutinen.

Subrutinar returner vanlegvis resultatet av det siste uttrykket, men ein eksplisitt `return`-verdi kan verte oppgjeven og føreslegen 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 simulerast ved å gje 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.

## Kjelder

## Bakgrunnsstoff

*