Příkazy

Jednoduché příkazy

Kdy musí být ukončený středníkem?
chomp($x = <>);
chomp($y = <>);
print "podíl $x a $y je ", $x/$y
Modifikátory

Složené příkazy

Složené příkazy se skládají z klíčových slov, výrazů a bloků. Výrazy jsou vyhodnocovány ve skalárním kontextu nebo v seznamovém kontextu v závislosti na typu příkazu.

Příkaz if a unless

if (VÝRAZ) BLOK
if (VÝRAZ) BLOK else BLOK
if (VÝRAZ) BLOK elsif (VÝRAZ) BLOK ... else BLOK

unless (VÝRAZ) BLOK
unless (VÝRAZ) BLOK else BLOK
unless (VÝRAZ) BLOK elsif (VÝRAZ) BLOK ... else BLOK

Příkaz cyklu while a until

while (VÝRAZ) 
BLOK
continue BLOK

until (VÝRAZ) 
BLOK
continue BLOK

Příkaz cyklu for

for (VÝRAZ; VÝRAZ; VÝRAZ) BLOK


for (my $i = 1; $i <= 10; $i++) {
   print "$i na 2 je ", $i**2, "\n";
}

# to samé jako 
{ my $i = 1;
  while($i <= 10) {
     print "$i na 2 je ", $i**2, "\n";
  } continue {
     $i++;
  }
} # končí platnost proměnné $i

Příkaz foreach (for)

foreach PROMĚNNÁ (SEZNAM) BLOK continue BLOK
Platnost proměnné cyklu:
$x = 10;

# lexikálně vymezená řídící proměnná $x
for my $x (1..5) {
	print $x;
}
# proměnná $x má hodnotu 10

# globální řídící proměnná $x, lokalizuje se
for $x (1..5) {
	print $x;
}
# proměnná $x má hodnotu 10

# globální řídící proměnná $x (vyjádřeno explicitně),
# lokalizuje se
for our $x (1..5) {
	print $x;
}
# proměnná $x má hodnotu 10
Prvky seznamu je možné modifikovat.
@cisla = (1..10);

foreach (@cisla) {
   $_ = $_**2;
}
# pole @cisla obsahuje 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

Řízení cyklů

RADEK: while ( <SOUBOR> ) {
           next RADEK if /^$/;
           # zpracování dat
       }

Samostatné (holé) bloky

Samostatný blok je část kódu uzavřená do dvojice složených závorek. Je považován za cyklus, který se provádí právě jednou. I zde je tedy možné použít pojmenování bloku pomocí návěští a je možné použít příkazy pro řízení cyklů a blok continue.
$radku=0;
BLOK: { 
  while (<>) {
     next BLOK if /NEZPRACOVÁVAT/;
     # zpracování dat

     $radku++;
  }
  # prezentace dat

} continue {
  print "zpracováno $radku rádků";
} 

Je třeba si uvědomit, že bloky v příkazech do, eval, map, sort či sub nejsou bloky v pravém slova smyslu, ale že společně s příkazem tvoří term. Proto není možné tyto bloky pojmenovávat a ani v nich použít příkazy pro řízení cyklů.

Rovněž příkazy if a unless nemají svá pojmenování a není je možné řídit pomocí příkazů pro řízení cyklů, protože se nejedná o cykly.

Toto omezení je možné obejít tím, že všechny příkazy v těchto blocích obalíme ještě do jednoho bloku.

if (VÝRAZ) {
   {
    # příkazy ...
    last if VÝRAZ;
   }
}
# nebo
if (VÝRAZ) {
   IF: {
       # příkazy ...
       last IF if VÝRAZ;
       }
}
V Perlu zcela chybí konstrukce pro obdobu příkazů case či switch z jiných programovacích jazyků (Pascal, C). Je však možné ji realizovat pomocí příkazů if nebo unless, ale mnohem elegantnější je řešení pomocí holých bloků a příkazů pro řízení cyklů.
# pomocí příkazu if
if    (PODMÍNKA1) {PŘÍKAZY1}
elsif (PODMÍNKA2) {PŘÍKAZY2}
elsif (PODMÍNKA3) {PŘÍKAZY3}
else              {PŘÍKAZY4}

# pomocí holého bloku a příkazu last
BLOK: {
  if (PODMÍNKA1) {PŘÍKAZY1; last BLOK}
  if (PODMÍNKA2) {PŘÍKAZY2; last BLOK}
  if (PODMÍNKA3) {PŘÍKAZY3; last BLOK}
  PŘÍKAZY4
}

# jinak pomocí holého bloku a příkazu last
BLOK: {
  (PODMÍNKA1) && do {PŘÍKAZY1; last BLOK}
  (PODMÍNKA2) && do {PŘÍKAZY2; last BLOK}
  (PODMÍNKA3) && do {PŘÍKAZY3; last BLOK}
  PŘÍKAZY4
}