Funkcije (podrutine)
Funkcije su osnovni element svakog programskog jezika. Najčešće se ponašaju poput običnih operatora čineći promjenu vrijednosti neke varijable ili vraćajući neku vrijednost koja se može pridjeliti nekoj drugoj varijabli. Osim toga, u određenom kontekstu funkcije izvode i kontrolu tijeka izvođenja programa (mijenjajući tijek programa od poziva fukcije, preko izraza kojima je definirana, pa nazad do točke od kuda je pozvana). Perl podržava pisanje funkcija, no u vlastitoj terminologiji one se nazivaju podrutine. Razlog je taj što se pod fukcijama misli na predefinirane funkcije - operatore.
Detaljnije o samim ppodrutinama može se naći u perlsub man stranicama.
Definicija podrutine
Definicija podrutine označava se s oznakom sub nakon čega slijedi ime funkcije i blok izraza unutar vitičastih zagrada. Pozivom funkcije izvest će se taj blok izraza. Na primjer:
sub ime_funkcije {
izraz_1;
izraz_2;
izraz_3;
}
Poziv podrutine
Podrutina se može pozivati unutar nekog izraza ili zasebno. Njen poziv se sastoji od znaka & iza kojeg slijedi ime podrutine: &ime_funkcije
Ukoliko se u podrutinu prenose argumenti, oni se unose unutar zagrada: &ime_funkcije("ognjen", 23)
Vraćanje vrijednosti
Podrutina uvijek vraća vrijednost zadnjeg izraza koji je izveden unutar podrutine. Na primjer:
sub aFunction {
izraz_1;
izraz_2;
$a = $b + $c;
}
U prethodnom primjeru podrutina vraća vrijednost varijable $a. Nakon povratka iz podrutine, vraćena vrijednost nalazi se u posebnoj varijabli $_.
Argumenti podrutine
Argumenti podrutine prenose se u podrutinu putem posebne varijable @_ koja predstavlja polje argumenata. Na primjer:
sub zbroji {
$_[0]+$_[1]
}
Podrutina vraća vrijednost zbroja dvaju brojeva koji se u nju prenose putem argumenata. Poziv te podrutine bi na primjer izgledao ovako: &zbroji(2, 5)
Lokalne varijable
Sve varijable definirane unutar Perl programa su globalne varijable.
Za podrutine je moguće definirati lokalne varijable koje su vidljive samo unutar podrutine. Na taj način ne može doći do promjene globalnih varijabli ako slučajno imaju jednako ime kao i neka od lokalnih varijabli. Lokalne varijable definiraju se operatorom local():
sub neka_rutina {
local ($A, $B);
$A = $_[0];
$B = $_[1];
}
&neka_rutina ($a, $b);
U prethodnom primjeru varijable unutar podrutine $A i $B će imati jednake vrijednosti kao i globalne varijable $a i $b. Bilo kakve promjene nad lokalnim varijablama neće utjecati na vrijednosti varijabli $a i $b.
|