Procedúry

Porovnanie :: PHP | Python

Čo je procedúra

Perl umožňuje definovať svoje vlastné funkcie, ktoré voláme procedúry. Procedúry môžu byť umiestnené kdekoľvek v programe, ale z hľadiska prehľadnosti je výhodné umiestniť ich všetky na koniec alebo na začiatok programu.

Príklad:

sub vypis
{
   print "Procedúra,\n";
   print "ktorá vypisuje stále to isté\n";
}

Porovnávacie príklady

Procedúra môže obsahovať aj parametre. Pri jej volaní sa na začiatok pridáva znak &.

Príklad:

&vypis; # volanie procedúry bez parametrov
&vypis($_); # volanie procedúry s parametrom
&vypis(1+2, $_); # volanie procedúry s dvoma parametrami

Parametre

Pri volání procedúry sú parametre predané do procedúry ako zoznam v špeciálnej premennej @_. Táto premenná je bežné pole. Nemá ale nič spoločné so skalárnou premennou $_.

Príklad:

sub printargs # procedúra vytlačí zoznam, ktorý bol do nej pridaný pomocou parametra
{
   print "@_\n";
}

&printargs("kráľ", "kráľovná"); # príklad tlačí "kráľ kráľovná"
&printargs("ryby", "a", "kraby"); # tlačí "ryby a kraby"

Porovnávacie príklady

Jednotlivé prvky poľa @_ sú prístupné pomocou indexu v hranatých závorkách.

Príklad:

sub printfirsttwo
{
   print "Prvý parameter je $_[0]\n";
   print "a $_[1] je druhý parameter\n";
}

Predanie hodnôt z procedúry

Procedúra predáva výsledok. Výsledok je hodnota posledného vykonaného príkazu, môže to byť pole alebo skalár.

Príklad:

sub maximum # procedúra vracia maximálnu hodnotu z dvoch vstupných parametrov
{
  if ($_[0] > $_[1])
  {
   $_[0];
  }
  else
  {
   $_[1];
  }
}

$biggest = &maximum(37, 24); # $biggest má hodnotu 37

Druhá možnost ako vrátiť výsledok z procedúry je použiť príkaz return.

Príklad:

sub MAX # procedúra MAX zisťuje maximálnu hodnotu zo vstupných hodnôt
{
  $max = pop(@_);
  foreach $a (@_)
  {
   if ($max < $a)
   {
   $max=$a;
   }
  }
   return($max);
}

$maximum = &MAX (12,22,7);
print $maximum;

Porovnávacie príklady

Ak je procedúra volaná v skalárnom kontexte, tak hodnota vrátená príkazom return je vyhodnotená v skalárnom kontexte. Ak je procedúra volaná v kontexte pole, je vrátená hodnota vyhodnotená v kontexte pole.

Typy vrátených hodnôt je možné testovať funkciou wantarray. Pre kontext pole funkcia wantarray vráti hodnotu true.

Lokálne premenné

Premenná @_ je lokálnou premennou danej procedúry, rovnako ako aj premenné $_[0], $_[1], $_[2],... . Je možné definovať aj ďalšie lokálne premenné.

Definovanie lokálnych premenných je výhodné, ak chceme modifikovať vstupné parametre.

sub inside
{
   local($a, $b); # vytvorenie lokálnych premenných
   ($a, $b) = ($_[0], $_[1]); # priradenie hodnôt lokálnym premenným
   $a =~ s/ //g; # odstránenie medzier v lok. premennej a
   $b =~ s/ //g; # odstránenie medzier v lok. premennej b
   ($a =~ /$b/ || $b =~ /$a/); # je $b v $a alebo $a v $b?
}

&inside("lemon", "dole money"); # true