Prikazy rizeni


Perl podporuje nekolik typu prikazu pro rizeni behu programu (smycek). Nektere z nich zde uvedeme.


foreach

Prikaz foreach postupne pouzije kazdy prvek pole nebo jine struktury ve tvaru seznamu (radku v souboru). Pro kazdy prvek pole provede sekvenci prikazu, ktera nasleduje. Ma tento tvar:
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.


Porovnavaci vyrazy

Nekolik dalsich ridicich struktur je zalozeno na vyhodnoceni vyrazu s vysledkem true nebo false. V Perlu je za true povazovano kazde nenulove cislo a neprazdny retezec. Jako false je vyhodnoceno cislo nula, retezec obsahujici pouze nulu a prazdny retezec.
Priklady porovnani:
$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

Perl ma prikaz for, ktery je podobny prikazu for v jazyce C. Ma tento tvar:
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";
}


while a until

Prikaz while provadi sekvenci prikazu opakovane dokud plati podminka. Prikaz until provadi sekvenci prikazu opakovane dokud nezacne platit podminka.

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.

do while

Jiny uzitecny postup je umistit prikaz while nebo until na konec bloku misto na zacatek. Na zacatek bloku pak musime umistit prikaz do, ktery bude zacatek bloku oznacovat. Vypustime zpravu sorry. Again?
#!/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


Prikazy pro preruseni cyklu

Existuje nekolik prikazu, kterymi je mozne ukoncit cyklus nebo jej modifikovat.

last

Prikaz last ukonci cyklus. Obvykle byva prikaz last spojen s prikazem if.

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

next

Prikaz next skoci na zacatek cyklu, zbytek bloku prikazu za next vynecha. Casto byva prikaz next spojen s prikazem if.


Dalsi kapitola | Predchozi kapitola kapitola | Obsah