Wat is Perl?
Perl is een scripttaal ontwikkeld door Larry Wall.
In deze cursus zullen we het vooral hebben over Perl onder windows, hoewel
de taal onder elk systeem (op een paar besturingsysteemafhankelijke functies
na) dezelfde taal is.
Installatie
Download
de nieuwste versie van ActivePerl
Als je een ouder besturingsysteem hebt dan Windows Me,2000 of Xp) moet je
Windows
Installer 2.0+ downloaden
Installeer het in c:\perl
Als je linux gebruikt moet je de eerste regel van scripts veranderen naar #!/usr/bin/perl -wT en de execute permisies hierop geven (bijv chmod 755 scriptje.pl). Om het script aan te roepen kan je door ./scriptje.pl of gewoon perl -wT scriptje.pl te typen in de 'shell'
Programma's maken
Open het programma Kladblok en typ (of knip/plak) er volgend 'script' in:
#!c:\perl\bin\perl.exe
-wT
print "Hallo wereld\n";
We slaan dit op als hallo.pl met als type alle bestanden in
de map c:\perl
Nu moeten we het nog uitvoeren. Daarvoor moet je een Ms-Dos-venster openen.
Je kan dat openen ergens in het startmenu maar het gemakkelijkste is start/uitvoeren
en dan typ je cmd of command en druk op ok. We zullen dit verder de 'shell' noemen. Dan moet je in het venster volgende
dingen typen:
C:\Documents and Settings\Jan>cd \perl
C:\Perl>hallo.pl
Hallo wereld
C:\Perl>
Je typt dus altijd eerst cd
\perl en dan hallo.pl (maar
meestal typt men perl -wT hallo.pl,
als we aannemen dat hallo.pl de bestandsnaam is)
Niets wereldschokkend maar met Perl worden er veel krachtige en belangrijke
applicaties gemaakt.
Omdat Perl programma's meestal geen grafische interface bevatten, laden ze en gaan
ze veel vlugger.
Waarvoor het dan wel nuttig is? Het is erg interessant voor gebruik als CGI-applicaties die websites meer dynamische inhoud geven, hoewel Perl oorspronkelijk ontwikkeld is om systeembeheer wat te automatiseren (wat het ook goed kan, maar dan spreken we over Linux, al kan het het ook voor windows maar daar gebruikt men meestal batch-bestanden).
We zullen het commando print veel gebruiken als we uitvoer willen creëren (en niet enkel voor scherm). Wat we achter print zetten is het argument van het commando print. In dit geval is het een tekstje dat begrensd wordt door aanhalingstekens(""). Een \n stelt een nieuwe regel voor, hetzelfde als we op 'Enter' drukken.
Variabelen
Zet volgend script in kladblok en sla het op als testinvoer.pl (in de map c:\perl) en voer het uit:
#!c:\perl\bin\perl.exe
-wT
print "Typ uw naam in: ";
$invoer = <STDIN>;
$lengtevoor = length($invoer);
chomp($invoer);
$lengtena = length($invoer);
print "\nwelkom
".$invoer."!\n\nDe invoer van je naam bedroeg oorspronkelijk ".$lengtevoor."
tekens, maar na afkapping van de enter-toets bedraagt je naam ".$lengtena."
tekens.";
Perl maakt zoals veel andere programeertalen gebruik van variabelen (bv. $invoer is een doos waar we iets kunnen insteken zoals je naam). Alleen moet men ze bij Perl niet eerst declareren (plaats in het geheugen reserveren voor een variabele). Voor Perl volstaat enkel dat we de variabele een waarde toekennen ($naamvanvariabele = waarde), waarbij de waarde een variabele, een berekening of een tekst ("tekst") kan zijn.
Je zult ook al gemerkt hebben dat elke regel (behalve de eerste) eindigt op een punt-komma (;). Dat is omdat Perl dit als eindteken voor een regel code neemt. De eerste regel is dan weer de locatie van het programma dat het kan uitvoeren. Dit hebben we eigenlijk eerder nodig als het een CGI voor een website betreft. De -w is dan weer om te zeggen dat we het programma eerst goed onderzoeken op fouten. De extra T optie dient om de invoer van de gebruiker te markeren als onveilig, ingeval de invoer mogelijk uitgevoerdt kan worden door het systeem. Het biedt een zekere vorm van veiligheid als we CGI's schrijven.
De derde regel zal ervoor zorgen dat je je naam kan intypen. <STDIN> (kort voor Standard Input of Standaard Invoer) bevat de naam die je getypt hebt voordat je op enter gedrukt hebt (het enterteken zelf is daarbij inbegrepen). Dan zal het worden toegewezen aan de variabele $invoer (de doos $invoer krijgt je naam + enterteken in zich). In de volgende regel zal een getal, namelijk de lengte van $invoer aan een andere variabele $lengtevoor toegewezen worden. In de vijfde regel wordt het enterteken van de invoer 'afgekapt' (vroeger gebruikte men er chop voor, maar chomp is iets veiliger).
De volgende regel zal de lengte van $invoer die nu geen enter-teken meer bevat in $lengtena steken. De zevende en laatste regel (dit is één regel) bevat de print- opdracht. Deze zal na een nieuwe lijn welkom zetten en dan je naam omdat de tekenreeks "\nwelkom " aaneengeschakeld werd met een punt aan de variabele $invoer. Het punt wordt altijd gebruikt om dingen aaneen te schakelen. $invoer wordt dan verder aaneengesloten door een andere tekenreeks, een variabele, een tekenreeks, weer een variable en nog een tekenreeks.
Operatoren
We hadden gezegd dat de waarde ook een berekening kon zijn. Dus zet volgend script in kladblok en sla op als operatoren.pl.
#!c:\perl\bin\perl.exe -wT
$getal1 =
5;
$getal2 = 2;
# Dit is een commentaar-regel
$berekening1 = 1 + 1; #
optellen
$berekening2 ="1 + 1"; #
dit wordt aanzien als tekst
$berekening3 = $getal1 - $getal2 ; # aftrekken
$berekening4 = "$getal1 - $getal2"; # Hoewel de berekening tussen
aanhalingstelens is worden de waarden van de variabelen gezet.
print "We hebben berekeningen met optellen en aftrekken hier, we hebben de variabelen \$getal1 = $getal1 en \$getal2 = $getal2. De uitkomsten van berekeningen zijn: ".$berekening1.", ".$berekening2.", $berekening3 en $berekening4 \n\n";
$getal1 = 4;
$getal2 = 3;
$berekening1 = $getal1
* $getal2; # vermenigvuldigen
$berekening2 = $getal1 / $getal2; # delen
$berekening3 = $getal1 ** $getal2;# macht
$berekening3 = sqrt($getal2); # vierkanstwortel (in
deze vorm is het geen operator)
$berekening4 = $getal1 % $getal2; # modulus (de rest)
print "We hebben
berekeningen met vermenigvuldigen, delen,vierkanswortel en modulus hier, we
hebben de variabelen \$getal1 = $getal1 en \$getal2 = $getal2. De uitkomsten
van berekeningen zijn: ".$berekening1.", ".$berekening2.",
$berekening3 en $berekening4 \n\n";
We gebruiken \$ om $ weer te geven omdat anders dit aangezien wordt als variable, dit noemt men escapen. dit is ook nuttig om " weer te geven: \" .Om \ dan weer te geven gebruikt men \\,voor @ \@ (bij twijfel kun je altijd speciale karakters escapen) In combinatie van cijfers letters hebben ze speciale betekenis: \n nieuwe lijn, \t tab ,\b backspace, \a bel, \e escape,.... Je kan ook enkele aanhalingstekens gebruiken: 's\'nachts"$\n \\test'
Hier moet enkel ' geescaped worden alle rest word gewoon weergegeven zoals het er staat. \\ wordt nog wel \
We zien dus dat we met de operatoren gemakelijk kunnen optellen
(+), aftrekken (-), vermenigvuldigen (*), delen (/), machtsverheffingen (**)
en rest berekenen met de modulus (%).
(Vierkantswortel is geen operator maar een methode (sqrt($getal)))
Operatoren is eigelijk een ruimer begrip. Een overzichtje:
De numerische operatoren
|
||
Operator
|
Voorbeeld
|
Betekenis
|
=
|
$Getal = 100; | Toekenningoperator. een waarde kan aan een variabele toegekend worden . |
+ - * / ** %
( )
|
print 24 + 4 / (5**4); | Wiskundige berekeningen |
+= -= *= /= **= %=
|
$scalar += 10; | Kort voor $scalar = $scalar + 10; , zal 10 bij $Scalar optellen. Idem andere bewerkingen. |
++ --
|
$test = $i++; |
Kort voor $i += 1; . Zal 1 optellen bij $i, als de kant van de ++ achter de variable staat dan zal $test de waarde krijgen van $i en dan pas 1 optellen. Wanneer ++ ervoor staat zal hij eerst één optellen en dan de waarde aan $test geven. Idem voor --. |
< <= == >= > !=
|
19 == 19 5 > 2 15 != 3 |
Vergelijkingsoperatoren: Zoals in de wiskunde heb je 'is kleiner dan' en 'is groter dan' ook in programeertalen Ze zullen waar of niet waar retourneren afhankelijk van de juistheid van de vergelijking. != betekent 'is niet gelijk. Komt aan bod in volgend deel. |
De stringoperatoren
|
||
Operator
|
Voorbeeld
|
Betekenis
|
.
|
"Jan" . " " . "van den Boom" | Samenvoegoperator voor striks aan elkaar te rijgen. |
.=
|
$tekst .= "\n"; | Er word een newline-teken toegevoegd aan de string tekst. |
++
|
$tekst= "Perl"; $tekst++; |
In dit geval zal er in $tekst Perm staan omdat dat de letter is die volgt op l. Operator -- werkt niet in dit geval. |
x
|
$tekst = "Aap " x 3; | Herhalingsoperator: Een kleine letter x zorgt ervoor dat de string er voor herhaald wordt met het nummer na de x. In $tekst zit dus Aap Aap Aap . |
eq ne lt gt le ge
|
$tekst eq "Perl" | Vergelijkingsoperatoren: Vergelijkt strings met elkaar (eq=equal, ne=not equal, lt=less than, gt=greater than, le= less or equal than, ge=greater or equal than) |
De logische operatoren |
||
Operator |
Voorbeeld |
Betekenis |
&& |
$temp > 10 && $temp <= 25 | De logische EN-operator: Geeft pas waar als aan beiden vergelijkingen volbracht zijn. |
|| |
$sensor == 1 || $sensor2 ==1 $a=1||2 |
De logische OF-operator: Geeft pas waar als een van de vergelijkingen volbracht zijn. |
! |
!($geld > 0) | De logische NIET-operator: Geeft pas waar als de vergelijking onwaar is. |
and |
$a == 4 || $b ==4 and $a==1 || $b==1 | De logische EN-operator met mindere samenhang. Is ($a == 4 || $b ==4) and ($a==1 || $b==1) |
or |
$a==2 && print "wel 2" or print "niet 2" | De logische OR-operator met mindere samenhang. Als a=2 word wel 2 afgeprint en wordt het tweede deel van de or niet bekeken |
not |
not a==4 && b==1 | De logische NIET-operator met mindere samenhang. Is not (a==4 && b==1) |
Oefeningen
1. Maak een programma dat je naam en adres afdrukt op het scherm. Opslaan als 1oef1.pl
2. Maak een programma dat de gebruiker zijn adres vraagt. Toon het adres en vertel erbij hoelang het is (vergeet chomp niet!). Opslaan als 1oef2.pl
3. Maak een rekenmachine. De gebruiker geeft 2 getallen in waarbij de som, het verschil, de vermenigvuldiging en de deling wordt gegeven (deling door 0 is buiten beschouwing gelaten). Opslaan als 1oef3.pl
Gefeliciteerd! Je hebt deel 1 van de Perl cursus met succes voltooid!
Volgende delen worden binnenkort beschikbaar