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

PEGASNETPEGASNET

PEGASNETPEGASNET

PEGASNETPEGASNET

PEGASNETPEGASNET