DBZ_File(3)           User Contributed Perl Documentation          DBZ_File(3)

       DBZ_File - Tied access to dbz files

        use DBZ_File;

        tie(%hist,DBZ_File,'/usr/lib/news/history');  # must exist
        tie(%hist,DBZ_File,'/usr/lib/news/history', O_CREAT, 0664);  # create OK

        $history_file_offset = %hist{$message_id};
        %hist{$message_id} = $history_file_offset;


       DBZ_File allows perl programs to read and write a dbz database, such as
       the news history file.

       The fetch and store functions handle all the dbz quirks, such as
       including a null character at the end of the key and translating the
       offset to/from a datum.  It also calls the dbzfetch and dbzstore
       functions, which means that the key gets the same upper-/lower- case
       processing that is done by the news system.

       You cannot delete a hash entry, or enumerate the keys since dbz doesn't
       support the functions necessary to support the DELETE, FIRSTKEY, and
       NEXTKEY tied array functions.  If you attempt to use one of these
       features, you'll get a fatal error.

       When creating a new database, the flags and umask are ignored by dbz,
       however they must both be non-zero for the command to indicate that a
       create is OK.

       You can't use multiple dbz-tied arrays at the same time since dbz can
       only open one database.  If you try, the tie call returns a failure.

       This module is probably not compatible with any previous (partial)
       versions of dbz support.  The reason for this is that they either
       required the appending of a null character to the key (ick) or the use
       of pack/unpack to be used with the offset value (yuck).

           use DBZ_File;

           tie(%hist, DBZ_File, '/usr/lib/news/history') or die $!;
           open(HFP, '+</usr/lib/news/history') or die $!;

           # Find an entry and output its line from the history file
           if (defined($pos = $hist{'<1234@clari.net>'})) {
               seek(HFP, $pos, 0);
               $_ = <HFP>;

           # Write a new entry at the EOF
           seek(HFP, 0, 2);
           $msgid = '<54321@clari.net>';
           $hist{$msgid} = tell(HFP);
           print HFP "$msgid\t", time, "~-~0\n";


       DBZ_File was written by Wayne Davison <wayne@clari.net>.  It is based
       on the NDBM_File module with a few ideas derived from an old alpha
       release written by Ian Phillipps <ian@pipex.net>.  The dbz module has
       many names on it, and is copyright 1988 Jon Zeeff.

3rd Berkeley Distribution    perl 5.005, patch 03                  DBZ_File(3)