Příkazy řízení


Perl podporuje několik typů příkazů pro řízení běhu programu (smyček). Některé z nich zde uvedeme.


foreach

Příkaz foreach postupně použije každý prvek pole nebo jiné struktury ve tvaru seznamu (řádků v souboru). Pro každý prvek pole provede sekvenci příkazů, která následuje. Má tento tvar:
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.


Porovnávací výrazy

Několik dalších řídících struktur je založeno na vyhodnocení výrazu s výsledkem true nebo false. V Perlu je za true považováno každé nenulové číslo a neprázdný řetězec. Jako false je vyhodnoceno číslo nula, řetězec obsahující pouze nulu a prázdný řetězec.
Příklady porovnání:
$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

Perl má příkaz for, který je podobný příkazu for v jazyce C. Má tento tvar:
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";
}


while a until

Příkaz while provádí sekvenci příkazů opakovaně dokud platí podmínka. Příkaz until provádí sekvenci příkazů opakovaně dokud nezačne platit podmínka.

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.

do while

Jiný užitečný postup je umístit příkaz while nebo until na konec bloku místo na začátek. Na začátek bloku pak musíme umístit příkaz do, který bude začátek bloku označovat. Vypustíme zprávu sorry. Again?
#!/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


Příkazy pro přerušení cyklu

Existuje několik příkazů, kterými je možné ukončit cyklus nebo jej modifikovat.

last

Příkaz last ukončí cyklus. Obvykle bývá příkaz last spojen s příkazem if.

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

next

Příkaz next skočí na začátek cyklu, zbytek bloku příkazů za next vynechá. Často bývá příkaz next spojen s příkazem if.


Další kapitola | Předchozí kapitola kapitola | Obsah