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 = &gyimilcs::kukac;
print "$barack, $gyimilcs::barack\n";
exit;
package gyimilcs;
sub kukac {
$barack = 'repa';
'karotta' }
amelynek kimenete:
karotta, repa
A példaprogram a gyimilcs 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:
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.