Perl podporuje nekolik typu prikazu pro rizeni behu programu (smycek). Nektere z nich zde uvedeme.
foreach $snedeno (@jidlo) # Pouzije kazdou polozku pole @jidlo # a ulozi ji do promenne $snedeno { print "$snedeno\n"; # tisk polozky print "Ham ham\n"; # tisk retezce }
Prikazy (tisky) musi byt uzavreny ve slozenych zavorkach.
Pri prvnim pruchodu je do $snedeno prirazena hodnota prvni polozky pole @jidlo
.
Pri dalsim pruchodu je prirazena druha polozka, atd. az do posledni polozky.
Pokud je pole @jidlo
na zacatku prazdne, pak se blok prikazu nikdy neprovede.
$a == $b # Je $a ciselne rovno $b # Pozor: nepouzivejte znak = $a != $b # Je $a ciselne ruzne od $b? $a eq $b # Je retezec $a shodny $b? $a ne $b # Je retezec $a ruzny od $b?
Je mozne pouzit tez logicke and, or nebo not:
($a && $b) # Je $a a $b true? ($a || $b) # Je $a nebo $b true? !($a) # Je $a false?
for (initialise; test; inc) { prvni prikaz; dalsi prikaz; atd. }Nejprve se provede vyraz initialise. Pote se provadi jednotlive prikazy ve slozenych zavorkach, dokud ma vyraz test hodnotu true. Po kazdem pruchodu je proveden vyraz inc. Priklad smycky, ktera tiskne cisla od 0 do 9.
for ($i = 0; $i < 10; ++$i) # Zahajeni s $i = 0 # Provadej dokud $i < 10 # Zvyseni $i pred novym pruchodem { print "$i\n"; }
Priklad programu, ktery cte data z klavesnice a pokracuje teprve po zadani spravneho hesla.
#!/usr/local/bin/perl print "Password? "; # Dotaz na vstup $a = <STDIN>; # precteni vstupu chop $a; # Odstraneni konce radky while ($a ne "fred") # Dokud je vstup chybny { print "sorry. Again? "; # $a = <STDIN>; # Nove precteni vstupu chop $a; # Odstraneni konce radky }Blok prikazu ve slozenych zavorkach je provaden do te doby, dokud se vstup nerovna heslu. Prikaz while je zrejmy, ale pripomenme nekolik veci. Cteme standardni vstup bez predchoziho otevreni souboru. Heslo ulozene do promenne $a obsahuje znak konec radky. Funkce chop odstrani posledni znak retezce, kterym je v nasem pripade znak konec radky.
K testovani opaku je mozne pouzit prikaz until.
#!/usr/local/bin/perl do { "Password? "; # Dotaz na heslo $a = <STDIN>; # Precteni vstupu chop $a; # Odstraneni konce radky } while ($a ne "fred") # Opakovani dokud je chybny vstup
Nasledujici smycka while (TRUE)
muze vypadat jako nekonecna, ve skutecnosti je ukoncena v okamziku, kdy $i je nula.
$i = 10; while (TRUE) { last if $i==0; print $i; $i--; }