sub alma { print "Bent vagyok a szubrutinban!!!"; return; }A szubrutinból kijönni a return utasítással lehet éppen úgy, mint C-ben, de ez el is hagyható. A return után lehet írni a visszatérési értéket. Ugyanúgy, mint C-ben egy szubrutinnak mindig van értéke, legfeljebb nem használjuk. Lehet, hogy jobb lenne func-nak hívni, de a Perl sub-nak hívja.
Egy szubrutint úgy lehet meghívni, hogy a neve elé az & jelet írjuk. Meg lehet hívni úgy is, hogy nem írjuk oda az & jelet, de ez nem mindig működik.
A függvényeknek paramétert is lehet adni. A paramétereket ugyanúgy, mint a
normális programozási nyelveknél a függvényhívás után kell vesszővel elválasztva
írni, zárójelek között. Ezek a @_ tömbbe kerülnek bele, és így
a $_[x] formában lehet rájuk hivatkozni.
&ssss(1,2,3);
sub ssss {
print $_[0],$_[2],$_[3],"\n";
}
ssss(1,2,3);
A függvényeken belül hivatkozhatók a globális változók, de hivatkozhatók lokális
változók is. Ezekből pedig kétféle lehet. Az egyik a függvényen belül helyileg lokális,
a másik pedig időben, a függvény futási ideje alatt lokális. Nem világos? Nézzünk
egy példát:
$my = 'global';
$local = 'global';
&subi;
&bubi;
sub subi {
my $my ='my';
local $local = 'local';
&bubi;
}
sub bubi {
print "$my\n$local\n";
}
és amit kiír:
global
local
global
global
Amikor bubi először lefut $local lokális, a $my
változóhoz azonban, mint globális változóhoz fér hozzá, a subi
függvény $my nevü változójához nem fér hozzá. A my deklarációval
létrehozott változók, tehát úgy lokálisak, mint ahogy azt megszoktuk a normális
programozási nyelvek esetében, a local viszont inkább úgy viselkedik,
mint aki a globális változó értékét félreteszi, majd amikor lefutott a félretett értéket
visszarakja.
Nézzünk most ismét egy példát:
print &suba(100);
sub suba {
my $i = shift;
if( $i%2 ){ $i+1 }else{ $i-1 }
}
és amit kiír:
99
Itt két dolgot érdemes megfigyelni. Az egyik, hogy egy lokális változóba, egy
shift operátorral, amelyiknek a default argumentuma a @_ tömb,
kivesszük a szubrutin argumentumát. Ezzel hasonló formában lehet az
argumentumokat kezelni, mint normális nyelveknél. Perlsze lehet Perlkedni,
akinek kedve van, de az ember egy idő után lenyugszik, főleg ha nem csak
játszik, hanem méretes programokat gyárt.
A másik dolog, hogy elhagytuk a return utasítást. Egy szubrutin értéke megegyezik az utoljára végrehajtott utasítás értékével. Ha ez egy return utasítás, akkor a return után írt kifejezés értéke a visszatérési érték.