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--; }