Perl deel I

ArticleCategory: []

Software Development

AuthorImage:[]

[Foto van de Auteur]

TranslationInfo:[]

original in en Guido Socher

en to nl Floris Lambrechts

AboutTheAuthor:[]

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.

Abstract:[]

Dit is het begin van een serie artikels over perl. Voorkennis is niet vereist om dit artikel te begrijpen. Een basiskennis van een procedurele programmeertaal (bijv. C of Pascal) maakt het wel gemakkelijker om met Perl te beginnen.

ArticleIllustration:[]

[Illustratie]

ArticleBody:[]

Wat is perl?

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.

Een eenvoudig programma

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.

Documentatie

In de loop van deze serie zal je Perl stap voor stap leren. Maar je kan ook de kleine reference manual (perlref-5.004.1.tar.gz) downloaden. De bijgevoegde README legt uit hoe je er een klein boekje van kan printen.

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.