Procedúry
Č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";
}
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"
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;
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

