12. Databases and PerlSince one of Perl's greatest strengths is working with text, a genuine concern is how to store data. Flat files are one possibility, but don't scale very well, to say the least. Instead, you'll need to use a database. There are two general solutions to using databases with Perl. For simple database purposes, DBM (Database Management) will serve your needs. DBM is a library supported by many (if not all) Unix systems and many non-Unix systems as well. If you use DBM with Perl, you can manipulate databases just like any hash. For more elaborate databases with SQL interfaces, you can get a complete database product or shareware equivalent (depending on your needs) and use DBI and DBD. DBI is a module that provides a consistent interface for database solutions. A DBD is a database-specific driver that translates DBI calls as needed for that database. In this chapter, we'll quickly cover DBM and then talk more at length about DBI/DBD. 12.1 DBM Databases and DBM HashesDBM is a simple database management facility for Unix systems. It allows programs to store a collection of key-value pairs in binary form, thus providing rudimentary database support for Perl. Practically all Unix systems support DBM, and for those that don't, you can get Berkeley DB from http://www.sleepycat.com/db .
To use DBM databases in Perl, you can associate
a hash with a DBM database through a process similar to
opening a file. This hash (called a DBM array) is
then used to access and modify
the DBM database.
To associate a DBM database with a DBM array, you can use either the
or (usingdbmopen(%ARRAYNAME, "dbmfilename", $mode);
tie
with the DB_File module):
Theuse DB_File; tie(%ARRAYNAME, "DB_File", "dbmfilename");
%ARRAYNAME
parameter is a Perl hash. (If it already has values, the
values are discarded.) This hash becomes connected to the DBM database called
dbmfilename
. This database
may be stored on
disk as a single file, or as two files called
dbmfilename.dir
and
dbmfilename.pag
, depending on the DBM implementation.
The This invocation associates the hashdbmopen(%BOOKS, "bookdb", 0666); # open %BOOKS onto bookdb
%BOOKS
with the disk files
bookdb.dir
and
bookdb.pag
in the current directory. If the files don't already exist, they are
created with a mode of 0666, modified by the current
umask
.
The return value from Once the database is opened, anything you do to the DBM hash is immediately written to the database. See Chapter 4, The Perl Language , for more information on hashes. The DBM array stays open throughout the program. When the program termi- nates, the association is terminated. You can also break the association in a manner similar to closing a filehandle, by using thedbmopen(%BOOKS, "bookdb", 0666) || die "Can't open database bookdb!"; $BOOKS{"1-56592-286-7"} = "Perl in a Nutshell";
dbmclose
function (or
untie
if you used
tie
). See
Chapter 5,
Function Reference
, for more information on
dbmclose
,
dbmopen
, and
tie
.
|
|