Perl

Filosofi

Perl ble laget for å være et praktisk språk for å hente ut informasjon fra tekstfiler, for så å nyttegjøre seg denne informasjonen.  Et av mottoene er «There's more than one way to do it» (TMTOWTDI – uttales «Tim Toady»), som direkte oversatt til norsk betyr «det er mer enn én måte å gjøre det på».  Et av målene med språket var å gjøre «enkle oppgaver enkle å løse, og vanskelige oppgaver mulige å løse».
Perl har direkte støtte for regulære uttrykk i sin syntaks, og språket er ofte betegnet som det typiske skriptspråket, og har blitt kalt «limet som holder webben sammen» på grunn av språkets popularitet som «CGI-språk».

Historie

Larry Wall, utdannet lingvist, skapte versjon 1.0 mens han jobbet som systemadministrator hos NASA i 1987. Hans formål var å lage et generelt scriptspråk for Unix for å forenkle rapportprosessering. Bruken av Perl nådde nye høyder i den første tiden da World Wide Web tok av rundt 1994, og ble de neste 3-4 årene av mange ansett som en de-facto standard for å lage dynamiske nettsider (webapplikasjoner) med CGI. Med mod_perl for Apache og rammeverk som Catalyst, Mason m.fl. brukes Perl fortsatt til nett-programmering.

Perl 6

Utviklingen av Perl 6 har foregått samtidig med Perl 5-oppgraderinger og foreligger i tidlige utgaver. Perl 6 er på mange måter et nytt språk og er ikke helt bakoverkompatibelt. Perl 6 tar i bruk Parrot, en virtuell maskin som  utvikles parallelt med tanke på å støtte flere programmeringsspråk. Perl 6 styrker også støtten for grammatikker, funksjonell programmering ("lazy evaluation") og objekt-orientert programmering. Perl 6 finnes i flere implementasjoner der Rakudo av mange ansees som den offisielle. Pugs (skrevet i Haskell) er en annen.
Perl 6 ble utgitt 24. desember 2015.

Hello, world!

#!/usr/bin/perl -w
print "Hello, world!\n";

Løkker

while ( uttrykk ) {
    ...
}
do {
    ...
} while ( uttrykk );
do {
    ...
} until ( uttrykk );
for ( initialisering ; termineringsbetingelse ; økningsgrad ) {
    ...
}
foreach ( liste ) {
    ...
}
for ( liste ) {
    ...
}

If-then

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

Subrutiner

Subrutiner spesifiseres med nøkkelordet sub.  Argumenter til subrutinen er tilgjengelige som elementer i den lokale (for subrutinen) tabellen @_.  Kaller man en subrutine med tre argumenter, blir disse representert som @_[0], @_[1] og @_[2] i subrutinen.  Merk at disse elementene blir referert til som skalarene $_[0], $_[1] og $_[2].  Funksjonen shift kan også benyttes for å få tak i hver av verdiene.
Endres noen av elementene i @_ i subrutinene, reflekteres også denne endringen i programmet som kalte subrutinen.
Subrutiner returner vanligvis resultatet av det siste uttrykket, men en eksplisitt return-verdi kan angis og anbefales for å gjøre det helt klart hva programmereren faktisk ønsker å returnere.
Eksempel:
sub kube {
    my $x = shift;
    return $x ** 3;}$z = -4;$y = kube($z);print "$y\n";
Navngitte argumenter kan simuleres ved å gi subrutinen en hash som inn-argument:
sub hallo {
    my %person = @_;
    return "Hallo, $person{fornavn} $person{etternavn}!\n";}print hallo (
    fornavn   => 'Ola',
    etternavn => 'Nordmann',);

Moduler

Man kan samle funksjoner i en biblioteksfil. I sin enkleste form kan dette gjøres slik i filen modtest.pm:
 # definer navn på pakke
 package modtest;
 
 # strict og warnings hjelper deg i debugging, og hindrer deg
 # å skrive slurvete kode.
 use strict;
 use warnings;
 
 # trengs for å kunne eksportere funksjoner
 use Exporter ();
  
 our @ISA         = qw( Exporter );
 
 # her eksporterer vi funksjonene
 our @EXPORT      = qw( hello helloname );

 sub hello {
     print "hello world\n";
 }

 sub helloname {
     my  $name = shift; # henter første innverdi

     print "hello $name\n";
 }

 ## returner 1 etter initiering av modul
 1;
Modulen brukes så på følgende måte:
 #!/usr/bin/perl

 use strict;
 use warnings;
 use modtest;

 hello();
 helloname( "you" );
 #end..
Merk at modulen ( modtest.pm ) må ligge i en av perls systemmapper ( se hva som ligger i @INC ).

CPAN

CPAN, Comprehensive Perl Archive Network, ble opprettet på slutten av nittitallet og er der man finner utvidelser til Perl (moduler). 
CPAN er ansett for å være en av Perls største styrker. Flere andre språk har prøvd å få til noe lignende. CPAN utvides daglig. Over 7000 programmerere fra hele verden har bidratt med over 15000 moduler, selv om mange av dem må sies å være eksperimentelle og uferdige versjoner. (alfa 0.01-versjoner)

Perl og databaser

DBI-grensesnittet er den CPAN-modulen som oftest blir brukt for å kommunisere med de fleste ANSI SQL-databasene, som f.eks. MySQL, PostgreSQL, Oracle og SQLite.

Andre språk

Perl har inspirert PHP (som først var utviklet i Perl) og Ruby. Vanlige alternativer til Perl er Python, Ruby og tildels Grails. Perl er laget i C og en del av de vanligste utvidelsene (modulene) på CPAN er helt eller delvis skrevet i C. Ved hjelp av modulen Inline::C, XS eller SWIG kan C-biblioteker (objekt-filer) bli tilgjengelige som moduler og subrutiner i Perl.