_  _   ,_
/^\/^\-/ @D
~(________/ PERL.LT
|L |L
L L
Straipsniai  Funkcijos 
Funkcijos/dbmopen - sukuria ryšį dbm failui

  • 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: $!";
algirdas@perl.lt 2005.04.11 - $dabar