original in en Guido Socher
en to nl Floris Lambrechts
Guido is al lang een Linux fan en recentelijk is hij ook begonnen als leider van _LF_. Tegenwoordig houdt hij zich ook bezig met het renoveren van zijn huis en het planten van sla en andere dingen in zijn tuin.
Perl is een scripttaal, oorspronkelijk ontwikkeld door Larry Wall. De
broncode kan rechtstreeks "uitgevoerd" worden door middel van het
eigenlijke perl programma. Dit is meestal te vinden in de directory /usr/bin/perl
.
Perl gelijkt in vele opzichten op de klassieke Unix programma's awk
en sed
maar is tegelijk ook veel uitgebreider. Met perl kan je zelfs
objectgeörienteerd programmeren en grafische interfaces ontwerpen.
Perl kan gemakkelijk worden uitgebreid met extra mogelijkheden in de vorm
van bibliotheken en het archief op
CPAN bevat er vele. Dit eerste artikel zal echter niet ingaan op
moeilijke onderwerpen. In de plaats daarvan toon ik nu de grondbeginselen en
ga ik later dieper op de dingen in.
Perl is een zeer nuttige scripttaal. Het is een universeel hulpmiddel voor iedereen die een beetje kan programmeren.
Bewaar het volgende
programma onder de naam my1stprg en maak het dan uitvoerbaar met de
opdracht
chmod 755 my1stprg .
Voer het uit en kijk wat er
gebeurt.
#!/usr/bin/perl -w
print "Wat is uw naam?\n"; $naam=<STDIN>; #verwijder het newline karakter: chomp($naam); $lang=length($naam); print "\nHallo $naam! Uw naam is $lang karakters lang\n"; |
Bekijken we even de code. De eerste regel is geen commentaar. Dit soort
regels, die beginnen met "#!" zijn typisch voor Unix scripts. Ze
vertellen het besturingssysteem wat het moet doen met dit tekstbestand.
Elke regel ná de eerste die begint met een #hekje# is een
commentaarregel (bijv. regel 4). We kunnen ook zien dat alle opdrachten
afgesloten worden met een ;puntkomma;. Een variabele begint met een
&dollarteken&. Perl variabelen kunnen strings (zinnen) bevatten, maar ook
gehele- en kommagetallen (integers en floats). De inhoud van de variabele
wordt automatisch omgezet naar het juiste type, afhankelijk van de context
waarin de variabele wordt gebruikt. De $-variabelen worden "scalar
variables" genoemd. Perl kent ook arrays (beginnend met @ i.p.v. $) en
hash tabellen (beginnend met % i.p.v. $). Deze soorten variabelen zullen in
een later artikel worden besproken.
De print functie op de tweede regel van ons script schrijft een regel tekst
naar de standaard uitvoer (stdout). Het werkt hetzelfde als het echo commando
in shell scripts en de variabelen worden vervangen door hun eigenlijke waarde
als de regel omsloten is door "dubbele aanhalingstekens".
Variabelen die staan tussen 'enkele aanhalingstekens' worden niet vervangen
door hun waarde en een \backslash\ kan gebruikt worden om speciale tekens
zoals het dollarteken of een aanhalingsteken te gebruiken binnen de
aanhalingstekens. Hier is een voorbeeld:
#!/usr/bin/perl -w
$naam="jan"; print "1 $naam\n"; print '2 ', $naam , "\n"; print '3 ', '$naam',"\n"; print "4 \"$naam\"\n"; print "5 \$naam\n"; print "6 \"\$naam\"\n"; |
Dit geeft:
1 jan
2 jan 3 $naam 4 "jan" 5 $naam 6 "$naam" |
Terug naar ons eerste eenvoudige programma. De regel $naam=<STDIN>; geeft aan dat de gebruiker iets kan intypen totdat hij op enter drukt. Nadien bevat de variabele $naam datgene wat de gebruiker heeft ingevoerd (ook het enterteken of de newline op het eind). De opdracht chomp($naam); verwijdert dit newline karakter aan het eind van $naam. Tenslotte telt de length functie het aantal karakters in $naam.
Spijtig genoeg bevat ons programma een fout (bug). Wat gebeurt er als je
een tab of spatie typt na je naam? Het wordt gewoon meegeteld als een
letter. Hoe lossen we dat op?
We moeten een zoek-en-vervang functie vinden om spaties te zoeken en te
verwijderen. Perl is gelukkig zeer goed uitgerust om text strings te
manipuleren. [ \t] is een reguliere expressie die gelijk is aan een
spatie of een tab. In perl kunnen we dit ook korter schrijven als \s.
(Meer over reguliere expressies kan je
hier vinden). Het perl
vervang-commando kan omgaan met reguliere expressies en heeft de syntax:
$naam=~ s/regexp/vervanging/g; Als we het 'vervang' veld leeg laten dan
worden alle stukken tekst die overeenkomen met de reguliere expressie
vervangen door niks; ze worden dus verwijderd.
Nu ziet ons programma er zo uit:
#!/usr/bin/perl -w
print "Wat is uw naam?\n"; $naam=<STDIN>; #verwijder het newline karakter: chomp($naam); print "\nHallo $naam!"; #verwijder de spaties uit de string: $naam=~s/\s//g; $lang=length($naam); print " Uw naam is $lang karakters lang\n"; |
Dit programma is niet echt nuttig omdat het geen 'control statements' (lussen en if-statements) heeft, maar het geeft een beeld van de basis van Perl. Deze serie gaat door en binnenkort zullen we verdergaan met meer complexe programma's.
Je kan ook "man perl" en "man perlfunc" proberen om te kijken welke functies er zoal zijn. Dit is echter meer bedoeld als referentie. Om Perl te leren moet je een cursus als deze volgen of een boek lezen zoals "Learning Perl" van O'Reilly.