Perl-ben nagyon egyszerû szubrutint írni:
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. Persze
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.
|