A Perl nyelv lehetõséget ad arra, hogy az egyes funkciókat modulokba
gyûjtsük, és ezeket a modulokat felhasználjuk más programokban.
Ez gyakorlatilag annyit jelent, hogy a modulok változói más
szimbólumtáblában kerülnek elhelyezésre, és így
bármiképpen is lettek elnevezve, nem zavarják más programrészek
változóit.
A modulok változóit, szubrutinjait természetesen kívülrõl
is el lehet érni, és használni. Ebben az esetben a
$modul::változó alakot kell használni.
Egy modul definícióját mindig a package kulcsszó vezeti be,
amelyet a modul neve követ. Az alapmodul, amelyet eddig is ismertél a main,
amely a változók és függvények neve elõl akár el is
hagyható, így $v, $::v és $main::v ugyanazt a
változót jelölik.
Modulok egymáson belül is elhelyezkedhetnek, ebben az esetben a külsõ
és a belsõ modul nevét is meg kell adni: $kulso::belso::valtozo.
Nézzünk meg egy egyszerû példát:
$barack = &gyumolcs::kukac;
print "$barack, $gyumolcs::barack\n";
exit;
package gyumolcs;
sub kukac {
$barack = 'repa';
'karotta' }
amelynek kimenete:
karotta, repa
A példaprogram a gyumolcs modul kukac szubrutinját hívja meg,
amely a modul $barack változójának értékét
beállítja, ugyanakkor a visszatérési érték a main
modul azonos nevû változójába kerül.
Amikor egy modult használunk, akkor általában jó, ha a modul
külön fájlban van. No nem azért, mert a modulnak külön
fájlban kell lennie, de nagyon gyakran elõfordul, hogy egy modult az egyik ember
megírja, és nagyon sokan meg használják. Ha ilyenkor mindenki
beszerkesztené a modult a saját programjába, akkor meglehetõsen nagy
forrásprogramok keletkeznének, és az egész nagyon áttekinthetetlen
lenne.
Ha egy modul egy külön fájlban van, akkor külön meg kell mondani a
Perl értelmezõnek, hogy a modult használni akarjuk. Erre a use
kulcsszó való. Ez után kell megadni a modul fájlnak a nevét,
amely ugyan az, mint a modul neve, ami a package kulcsszó után áll.
A fájl kiterjesztése .pm, de ezt NEM írjuk a use kulcsszó
után.
Ha van egy egyszerû modulunk például a modul1.pm fájlban,
és ezt használni szeretnénk a prog.pl fájlból, akkor ezt
a következõ módon tehetjük meg:
push @INC, '.';
use modul1;
&modul1::szia;
és persze a kimenet:
Betöltõdött a modul1 modul.
Rettenetesen örülök neked!
Kitörlõdött a modul1 modul.
Ezek után két alapvetõ kérdés merül fel:
- Mi van a modulban?
- Minek a push @INC ... utasítás?
Az elsõre nagyon könnyû válaszolni:
package modul1;
BEGIN {
print "Betöltõdött a modul1 modul.\n";
}
END {
print "Kitörlõdött a modul1 modul.\n";
}
sub szia {
print "Rettenetesen örülök neked!\n";
}
1;
és ez a válasz máris további kérdéseket generált:
mi az a BEGIN és mi az az END. Csak sorjában.
Az a push utasítás az INC tömb végére rakja az
egy pontot tartalmazó füzért. Ezt már az eddigiek alapján is tudnod
kell. Az INC tömb egy speciális tömb, amelyet a Perl interpreter
használ, és a modul fájlokat azokban a könyvtárakban (directory-kban)
próbálja megkeresni, amelyek szerepelnek ebben a tömbben. Írassuk ki az
én rendszeremen:
C:\Perl5\lib\i386-win32
C:\Perl5\lib
.
Ebbõl például látszik az, hogy ezt a könyvet Windows rendszeren
írom.
|