ohjeita web-sivuston tekijälle
Perl tukee useita erilaisia ohjainrakenteita, jotka ovat yleensä suuresti C-kielen vastaavien kaltaisia. Näitä rakenteita käytetään ohjelman suorituksen ohjaamiseen
Käy läpi matriisin tai muun listarakenteen jokaisen elementin.
foreach $morsel (@food)
ottaa yhden merkkijonon listasta ja asettaa sen muuttujan $morsel arvoksi ja toistaa lauseketta jokaiselle merkkijonolle
{
print "$morsel\n";
#tulostaa muuttujan $morsel sisällön
print "Yum yum\n";
}
Toimenpiteet sijoitetaan aaltosulkujen sisään ( {} ). Ensimmäisellä kerralla muuttujan $morsel arvo on @food-matriisin ensimmäinen merkkijono, toisella kerralla toinen jne. Jos matriisi @food on alussa tyhjä ei alltosulkuihin sijoitettuja lausekkeita suoriteta kertaakaan.
Seuraavat rakenteet perustuvat ehtoihin, jotka antavat tulokseksi joko true tai false. Perlissä mikä tahansa ei-nolla numero tai ei-tyhjä merkkijono tulkitaan arvoksi true. Nolla tai tyhjä tulkitaan arvoksi false.
$a == $b $a numeerisesti sama kuin $b HUOM! Älä käytä = operaattoria. $a != $b $a numeerisesti eri kuin $b $a eq $b $a merkkijono sama kuin $b $a ne $b $a merkkijono eri kuin $b
Myös loogisia operaattoreita AND, OR ja NOT voidaan käyttää:
($a && $b) $a ja $b tosi ($a || $b) joko $a tai $b tosi !($a) $a epätosi
Perlissä on for-rakenne joka toimii samoin kuin C-kielessäkin:
for (alustuslause; ehtolause; iteraatiolause)
{
ensimmäinen lauseke;
toinen lauseke;
}
Ensimmäiseksi suoritetaan muuttujan alustus, sitten jos ehtolause antaa tulokseksi tosi suoritetaan aaltosulkeiden sisään sijoitetut lausekkeet. Joka kerta kun lausekkeet on suoritettu suoritetaan iteraatiolauseke, joka on usein nk. iteraatiomuuttujan kasvatus yhdellä. Seuraava esimerkki tulostaa numerot 0: sta 9: ään.
# alustetaan muuttuja $i = 1
# toistetaan niin kauan kuin ehto $i < 10 pitää paikkansa
# kasvatetaan $i:tä ennen toista kierrosta
for ($i = 0; $i < 10; ++$i)
{
print "$i\n";
}
Seuraava ohjelma lukee näppäimistöltä annetun syötteen eikä jatka ennen kuin annetaan oikea salasana
#!/usr/local/bin/perl
print "Password? "; # kysytään salasanaa
$a = <STDIN> # luetaan syöte
chomp $a; # poistetaan rivinvaihto lopusta
while ($a ne "fred") # niin kauan kuin syöte on väärin
{
print "sorry. Again? ";
$a = <STDIN>;
chop $a;
}
Aaltosulkeisiin sijoitetut lausekkeet toistetaan niin kauan, kuin syöte ei ole sama kuin salasana. Syötteestä voidaan lukea avaamatta tiedostoa ensin. Kun salasana syötetään, $a:lle annetaan arvoksi syöte mukaanlukien rivinvaihtomerkki (\n) lopussa. Chomp-funktio poistaa merkkijonon viimeisen merkin jos se on rivinvaihtomerkki.
Haluttaessa testata päinvastaista tapausta käytetään until-lauseketta samalla tavoin. Tämä toistaa lausekkeita kunnes testaus antaa arvon arvon true.
Toinen käyttökelpoinen tekniikka on sijoittaa while- tai until -lauseke lausekeryhmän loppuun alun asemesta. Tämä vaatii do -operaattorin käyttöä merkitsemään lausekeryhmän alkua ja testausta lopussa. Do-silmukka suorittaa aina lausekeryhmän ainakin kerran ja tutkii ehtolauseen vasta toiselle kierrokselle siirtyessään. Edellinen esimerkki:
#!/usr/local/bin/perl
do
{
"Password?";
$a = ;
chop $a;
}
# toistetaan niin kauan kuin syöte on väärin
while ($a ne "fred")
Luonnollisesti Perl hyväksyy myös if / elsif / else -lausekkeet:
if ($a)
{
print "The string is not empty\n";
}
else
{
print "The string is empty\n";
}
Merkkijono tulkitaan tyhjäksi myös silloin, jos se on luku 0. Ehtolausekkeeseen voidaan myös antaa useita vaihtoehtoja:
# ! on negaatio-operaattori ('ei')
if (!$a)
{
print "The string is empty\n";
}
# jos edellinen ei ole tosi kokeile seuraavaa
elsif (length($a) == 1)
{
print "The string has one character\n";
}
elsif (length($a) == 2)
{
print "The string has two characters\n";
}
# mikään ehdoista ei ollut tosi
else
{
print "The string has lots of characters\n";
}
HUOM! Elsif-lausekkeessa ei kuulu olla jälkimmäistä e: tä.
Seuraava sivu: Merkkijonohaku.
Ei kommentteja