Perl podporuje několik typů příkazů pro řízení běhu programu (smyček). Některé z nich zde uvedeme.
foreach $snedeno (@jidlo) # Použije každou položku pole @jidlo # a uloží ji do proměnné $snedeno { print "$snedeno\n"; # tisk položky print "Ham ham\n"; # tisk řetězce }
Příkazy (tisky) musí být uzavřeny ve složených závorkách.
Při prvním průchodu je do $snedeno přiřazena hodnota první položky pole @jidlo
.
Při dalším průchodu je přiřazena druhá položka, atd. až do poslední položky.
Pokud je pole @jidlo
na začátku prázdné, pak se blok příkazů nikdy neprovede.
$a == $b # Je $a číselně rovno $b # Pozor: nepoužívejte znak = $a != $b # Je $a číselně různé od $b? $a eq $b # Je řětězec $a shodný $b? $a ne $b # Je řetězec $a různý od $b?
Je možné použít též logické 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) { první příkaz; další příkaz; atd. }Nejprve se provede výraz initialise. Poté se provádí jednotlivé příkazy ve složených závorkách, dokud má výraz test hodnotu true. Po každém průchodu je proveden výraz inc. Příklad smyčky, která tiskne čísla od 0 do 9.
for ($i = 0; $i < 10; ++$i) # Zahájení s $i = 0 # Prováděj dokud $i < 10 # Zvýšení $i před novým průchodem { print "$i\n"; }
Příklad programu, který čte data z klávesnice a pokračuje teprve po zadání správného hesla.
#!/usr/local/bin/perl print "Password? "; # Dotaz na vstup $a = <STDIN>; # přečtení vstupu chop $a; # Odstranění konce řádky while ($a ne "fred") # Dokud je vstup chybný { print "sorry. Again? "; # $a = <STDIN>; # Nové přečtení vstupu chop $a; # Odstranění konce řádky }Blok příkazů ve složených závorkách je prováděn do té doby, dokud se vstup nerovná heslu. Příkaz while je zřejmý, ale připomeňme několik věcí. Čteme standardní vstup bez předchozího otevření souboru. Heslo uložené do proměnné $a obsahuje znak konec řádky. Funkce chop odstraní poslední znak řetězce, kterým je v našem případě znak konec řádky.
K testování opaku je možné použít příkaz until.
#!/usr/local/bin/perl do { "Password? "; # Dotaz na heslo $a = <STDIN>; # Přečtení vstupu chop $a; # Odstranění konce řádky } while ($a ne "fred") # Opakování dokud je chybný vstup
Následující smyčka while (TRUE)
může vypadat jako nekonečná, ve skutečnosti je ukončena v okamžiku, kdy $i je nula.
$i = 10; while (TRUE) { last if $i==0; print $i; $i--; }