dbmopen HASH,DBNAME,MASK
[Ši funkcija beveik išstumta iš naudojimo tie
funkcijos.]
Ji suriša dbm(3), ndbm(3), sdbm(3), gdbm(3) ar Berkeley DB failą su
hash'u. HASH yra hash'o pavadinimas. (Skirtingai nuo normalausopen
,
pirmas argumentas nėra filehandle'as, net jei jis ir atrodo panašiai).
DBNAME yra duombazės pavadinimas (be .dir ar .pag
išplėtimų, jei tokie yra). Jei duombazė neegzistuoja, ji sukuriama su apsauga, aprašyta MASK (kaip pamodifikuota umask
). Jei sistema palaiko tik senesnes DBM funkcijas, galima atlikti tik vieną dbmopen
programoje. Senesnėse Perl versijose, jei sistema neturi nei DBM, nei
ndbm, kvietimas dbmopen
išmesdavo fatal error; dabar grįžtama atgal prie sdbm(3).
Jei neturima rašymo teisės į DBM failą, galima tik nuskaityti hash
kintamuosius, bet nustatyti jų - ne. Jei norima pratestuoti ar galima rašyti, arba reiktų naudoti failo testus aba mėginti užsatyti fiktyvią hash'o įvestį eval
,
viduje, kas paspęs spąstus klaidai.
Pažymėtina, kad funkcijos, tokios kaip keys
ir values
gali gražinti didžiulius sąrašus, naudojant dideliems DBM failams. Gali būti labiau prie širdies anudoti
each
funkciją
didelių DBM failų iteracijai. Pavyzdys:
# išspausdinti history failo offset'us
dbmopen(%HIST,'/usr/lib/news/history',0666);
while (($key,$val) = each %HIST) {
print $key, ' = ', unpack('L',$val), "\n";
}
dbmclose(%HIST);
Taip pat žiūrėti AnyDBM_File
bendresniam įvairių dbm pusių, kaip ir DB_File ypač geram įgyvendinimui.
Galima kontroliuoti, kurią DBM biblioteką naudoti užkraunant tą biblioteką prieš dbmopen() kvietimą:
use DB_File;
dbmopen(%NS_Hist, "$ENV{HOME}/.netscape/history.db")
ar die "Can't open netscape history file: $!";