DBM Database Example - Book Records with Multiple Fields

This section provides a tutorial example of using DBM database files to build book records with multiple fields by joining them into a single string value.

This DBM example will show you how to manage a table with multiple columns. In the following Perl program, BookInsert.pl, I joined all columns into a single string with "\t" as the delimiter, and stored it into the hash:

#- BookInsert.pl
#- Copyright (c) HerongYang.com. All Rights Reserved.
#
   ($name) = @ARGV;
   die "Missing DBM name.\n" unless $name;
   dbmopen(%map,$name,0666);
   $id = &lastKey();
   $id++;
   $key = $id;
   $title = "Programming Perl";
   $author = "Larry Wall";
   $date = "Jan 1991";
   $isbn = "0937175641";
   $edition = "1";
   $val = join("\t",$title,$author,$date,$edition,$isbn);
   $map{$key} = $val;
   $id++;
   $key = $id;
   $title = "Learning Perl";
   $author = " Randal L. Schwartz";
   $date = "Nov 1993";
   $isbn = "1565920422";
   $edition = "3";
   $val = join("\t",$title,$author,$date,$edition,$isbn);
   $map{$key} = $val;
   dbmclose(%map);
   exit;
sub lastKey {
   local $max = 0;
   local $key, $val;
   while (($key,$val)=each(%map)) {
      $max = $key if ($key>$max);
   }
   return $max;
}

To bring back individual columns from the hash, I used the split function as shown in the following program, BookPrint.pl

#- BookPrint.pl
#- Copyright (c) HerongYang.com. All Rights Reserved.
#
   ($name) = @ARGV;
   die "Missing DBM name.\n" unless $name;
   dbmopen(%map,$name,0666);
   $rec = 0;
   while (($key,$val)=each(%map)) {
      $rec++;
      $id = $key;
      ($title,$author,$date,$edition,$isbn) = split("\t",$val);
      print "\nRecord: $rec\n";
      print "        id = $id\n";
      print "    author = $author\n";
      print "      date = $date\n";
      print "   edition = $edition\n";
      print "      isbn = $isbn\n";
   }
   dbmclose(%map);
   exit;

Here is the output of running these programs together:

herong> BookInsert.pl bookbase

herong> BookPrint.pl bookbase

Record: 1
        id = 1
    author = Larry Wall
      date = Jan 1991
   edition = 1
      isbn = 0937175641

Record: 2
        id = 2
    author =  Randal L. Schwartz
      date = Nov 1993
   edition = 1
      isbn = 1565920422

Table of Contents

 About This Book

 Perl on Linux Systems

 ActivePerl on Windows Systems

 Data Types: Values and Variables

 Expressions, Operations and Simple Statements

 User Defined Subroutines

 Perl Built-in Debugger

 Name Spaces and Perl Module Files

 Symbolic (or Soft) References

 Hard References - Addresses of Memory Objects

 Objects (or References) and Classes (or Packages)

 Typeglob and Importing Identifiers from Other Packages

 String Built-in Functions and Performance

 File Handles and Data Input/Output

 Open Files in Binary Mode

 Open Directories and Read File Names

 File System Functions and Operations

 Image and Picture Processing

Using DBM Database Files

 dbmopen() - Opening DBM Files with Hash Variables

 DBM Database Example - English French Dictionary

DBM Database Example - Book Records with Multiple Fields

 Using MySQL Database Server

 Socket Communication Over the Internet

 XML::Simple Module - XML Parser and Generator

 XML Communication Model

 SOAP::Lite - SOAP Server-Client Communication Module

 Perl Programs as IIS Server CGI Scripts

 CGI (Common Gateway Interface)

 XML-RPC - Remote Procedure Call with XML and HTTP

 RPC::XML - Perl Implementation of XML-RPC

 Integrating Perl with Apache Web Server

 CGI.pm Module for Building Web Pages

 LWP::UserAgent and Web Site Testing

 Converting Perl Script to Executable Binary

 Managing Perl Engine and Modules on macOS

 Archived Tutorials

 References

 Full Version in PDF/EPUB