Programming Republic of Perl LogoPerl Interactief

Een van de handige dingen van Perl voor beginners is het feit dat Perl een interpreter is...

Dit wil zeggen dat je een programma niet eerst hoeft te compileren, maar dat Perl het direct uit kan voeren. Het geeft ook de mogelijkheid om zo Perl stukjes Perl uit te laten voeren, bijvoorbeeld om commando's uit te proberen. Je typt een regel in, Perl voert het uit en geeft het antwoord. Dat zou er bijvoorbeeld zo uit kunnen zien (waarbij de dikgedrukte tekst door mij is ingetypt):

Ps: deze programma'tjes werken zowel onder Windows als onder Linux

Perl> 1+1
 eval returned: 2
Perl>
@a = (1..5);
 eval returned: 1, 2, 3, 4, 5
Perl>
@a[1]
 Scalar value @a[1] better written as $a[1] at (eval 3) line 1, <> line 3.
 eval returned: 2
Perl>
$a[1]
 eval returned: 2
Perl>
quit

Als voorbeeld: Zie de foutmelding...: 'ik was even vergeten' dat een array element niet met een '@' maar met een '$' begint... Maar: je kan ook veel complexere constructies testen, inclusief laden van complete modules. Eigenlijk heb je hier gewoon Perl aan je voeten liggen.

Ik heb bovenliggend voorbeeld dankzij een klein interpreter-programma'tje genaamd 'interpret.pl' dat ik ooit eens geschreven heb, terwijl ik zelf Perl aan het leren was. Omdat ik denk dat het ook voor anderen nuttig kan zijn zal ik het hier eens beknopt uitleggen.

Hier is de kern van het programma (eigenlijk haast zowat het hele programma, afgezien van het openen en sluiten van de logfile waarin ik de ingetypte commando's bewaar, handig om er later een script van te maken). Het hele programma draait om het 'eval' commando, dat een nieuwe regel Perl uitvoert. Waar de regel vandaan komt doet er voor 'eval' niet toe, is in dit geval van de 'standaard input' (normaal het keyboard):

while(<>)                 # zolang er regels binnenkomen:
{                         # (vanaf STDIN: keyboard)
  last if(/^quit/i);      # herken 'quit': stopt evt. de interpret loop
  s/^\?/print /;          # vertaal '?' aan begin regel naar 'print'
  while (/\\$/)           # '\' aan einde regel ('$') betekend dat
  {                       # commando doorloopt op de volgende regel:
    s/\\$//;              # '\' er af hakken
    $_ .= <>;             # en volgende regel er aan plakken
  }

  @result = eval;         # evalueer het ingetypte commando

  print " eval returned: " if !/^print/;
  print @result if !/^print/; # alleen afdrukken als niet al gedaan
  print $@ if ($@);       # druk ook eventuele foutmeldingen af

  print "\nPerl> ";       # print de 'Perl>' prompt, en opnieuw
}

Het volledige script zorgt er voor dat je makkelijk met Perl kunt spelen, en zo snel zaken kunt uitproberen. De volledige file kan je downloaden als zip file interpret.pl (2 Kbyte). Is standaard Perl, werkt dus op elke Perl5 omgeving (Windows, Linux, ...). Onder Windows kan je vermoedelijk deze file direct dubbelklikken, mits de .pl extensie netjes met Perl geassocieerd is. Je kunt ook direct een snelkoppeling (shortcut) maken naar het script, met (bij mijn installatie: heb het script opgeslagen in de directory Progs in Perl) als doel C:\Perl\Progs\interpret.pl Lukt dit niet, dan is het het makkelijkste om een batch file (Windows) te maken ('interpret.bat') met als inhoud:

perl -w  <pad_naar_script>/interpret.pl

waarbij <pad_naar_script> moet worden vervangen door het pad waar 'interpret.pl' is opgeslagen. Maak een short-cut naar deze batch-file, en met een dubbel-klik heb je een Perl-prompt voor je neus! 

Overigens: Perl heeft altijd de mogelijkheid om van bijvoorbeeld een DOS prompt ook direct commando's uit te voeren, door middel van de -e optie. Probeer bijvoorbeeld maar eens: perl -e "print 1+1" Andere nuttige opties zijn bijvoorbeeld -p en -n (zie de documentatie: voeren commando's uit op regels in een file).

Perl met Tk grafische user interface

Screen capture TkInterpret.plUiteraard kan het mooier, door er een grafische interface rond te hangen met behulp van Tk. Hiermee heb je een mooi edit-window voor de commando's, een window voor de output, een voor de foutmeldingen, en nog wat handige knoppen, als 'load' en 'save' voor de gemaakte programma's. Wil je weten hoe het script werkt, kijk dan eerst naar het 'Turtle' voorbeeld, TkInterpret is op dezelfde structuur gebaseerd.

Wil je het gebruiken, download dan de zip file met TkInterpret.pl (2.3 Kbyte). Gebruik is vergelijkbaar met interpret.pl, maar met een mooi multi-line edit window. Om te voorkomen dat je op de achtergrond een DOS-box ziet verschijnen kan je dit niet met perl.exe maar met wperl.exe starten: de snelkoppeling (shortcut) ziet er dan als volgt uit:

C:\Perl\bin\wperl.exe C:\Perl\Progs\TkInterpret.pl

Voor wat meer gevorderden: Het leuke is dat je hiermee ook eenvoudig met Tk kunt experimenteren. Zo kan je zelf knoppen en windows toevoegen, door ze in het TkInterpret framework toe te voegen. In de source kan je de naam van bijvoorbeeld het top-window vinden, en hier extra windows bij hangen. Ook voor het testen van andere Tk features is dit heel makkelijk (bijvoorbeeld spelen met de voor- en achtergrond-kleur). Om bijvoorbeeld de achtergrond van de error log area rood te maken:

$error->configure(-background => 'red')

Leuk, he? Veel plezier er mee...