**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
--------------

* 
* 
* Arkivert 2005-10-29 ved Wayback Machine.
* Perl-6-FAQ[*daud lenkje*]

| * v
* d
* e
Programmeringsspråk |
| --- |
| ABC**·** Ada**·** AFL**·** Agora**·** ALGOL**·** APL**·** Assembler**·** awk**·** B**·** BASIC**·** BETA**·** BLISS**·** C**·** C++**·** C#**·** Caml**·** Cobol**·** Concurrent C**·** CSP**·** D**·** Delphi**·** Erlang**·** Forth**·** Fortran**·** Haskell**·** HyperTalk**·** Icon**·** INTERCAL**·** Java**·** Lisp**·** Miranda**·** ML**·** Modula**·** NIAL**·** Objektorientert C**·** occam**·** OCaml**·** O'Haskell**·** Pascal**·** Perl**·** PHP**·** Pike**·** PL/I**·** Plankalkül**·** Portal**·** Prolog**·** Python**·** R**·** Ruby**·** Scheme**·** Simula**·** Sina**·** Sisa**·** Smalltalk**·** SML**·** SNOBOL**·** Visual Basic |


|  |  |
| --- | --- |
| Autoritetsdata | 
* WorldCat
* Store norske leksikon
* GND
* LCCN
* BNF
* BNF (data)
* NKC
* BNE

 |