Okay gaan we weer... vindt iedereen het nog leuk ? ... of tenminste 1 iemand ? ... dan ga ik hierna nog door...
Ongeacht dat:
Perl weetjesIk ga hier wat extra dingen uitleggen over Perl en zal ook uitleggen wat mijn eigen stijl is.
if/else/unlessJa, je leest het goed,
unless. Unless doet eigenlijk precies het tegenovergestelde van een if...
zeg je bij een if 'doe dit als dit waar is' zeg je bij unless 'doe dit behalve wanneer dit waar is'.
Ik heb al uitgelegd dat je een if bijvoorbeeld zo gebruikt:
my $Number=4;
if ($Number>3)
{
print "$Number is groter dan 3\n";
};Nou kan je bij Perl, wanneer er maar 1 statement binnen je if staat en je geen else gebruikt dit ook anders schrijven, ik doe dit ook altijd, dus bovenstaand vooorbeeld zou ik zo schrijven:
my $Number=4;
print "$Number is groter dan 3\n" if ($Number>3);
En hetzelfde kan je bereiken met unless:
my $Number=4;
print "$Number is groter dan 3\n" unless ($Number<=3);
Nou, dat is al een weetje.
Verder hebbben we nog de impliciete scalar $_ ... $_ is gewoon een variabele zoals je hem zelf ook zou kunnen aanmmaken, maar Perl zorgt ervoor dat $_ de waarde krijgt die je (meestal) verwacht...
Om duidelijk te maken wat ik bedoel zal ik aan behulp van een voorbeeld proberen te laten zien wat dit betekent. We gaan de getallen van 1 tm 10 printen uit een list.
my @Getal=(1,2,3,4,5,6,7,8,9,10);
my $Huidig;
for $Huidig (@Getal)
{
print $Huidig;
};Nou, dit moet onderhand wel duidelijk zijn. je ziet dat Perl elke keer de waarde van het element uit @Getal aan huidig geeft... laten we nou $Huidig weg, dan zal Perl die waarde toekennen aan de speciale variabele $_, zoals dit:
my @Getal=(1,2,3,4,5,6,7,8,9,10);
for (@Getal)
{
print $_;
};Je hebt al eerder gezien dat Perl wanneer je print aanneemt dat je naar STDOUT wil printen... nou we kunnen nog een stap verder. Perl neemt ook altijd aan dat wanneer je niets achter print zegt dat je $_ wil printen, we kunnen dit dus ook zo schrijven (Ik pas gelijk de list @Getal even aan) :
my @Getal=(1..10);
for (@Getal)
{
print;
};Of zelfs (omdat er maar 1 statement in het for lusje zit):
my @Getal=(1..10);
print for (@Getal);En dan kan je net zo goed dit schrijven:
print for (1..10);Verder nog wat over bestanden inlezen.
Ik vertelde dat je een regel uit een bestand inleest door <FILEHANDLER>, maar stel nou dat ik de regels uit een bestand allemaal 1 vooor 1 wil bekijken ?
Dat doen we zo:
---
my $File="test.txt";
#Ik doe nog even geen fout afhandeling, we nemen gewoon aan dat het bestand goed geopend wordt.
open INPUT,"<$File";
#Dit wil zoveel zeggen als "Zolang er regels uit de filehandler gelezen kunnen worden"
while(<INPUT>)
{
#We hebben nergens gezegd naar welke variabele we inlezen dus Perl zal de regel in $_ stoppen.
#Afdrukken:
print "Regel gelezen: $_";
};
#Klaar met bestand:
close INPUT;---
Nou, ik hoop dat hier vragen over komen
, of in ieder geval dat jullie het nog volgen... dan gaan we volgende keer beginnen aan subroutines om structuur in ons programma aan te brengen. (Later hoor je ook nog meer over het openen van files, en foutafhandeling door middel van 'die', maar daar komen we nog op...