DBM Databases and DBM Hashes

DBM 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 ship with built-in DBM support, some with a separate libdb and others with DBM calls built into libc. In the absence of DBM support on your system, you can use gdbm from GNU, which is an extension to vanilla DBM or BerkeleyDB-3.x from http://www.sleepycat.com/.

To use DBM databases in Perl, you can associate a hash with a DBM database through the AnyDBM module that uses tie( ). This hash (called a DBM array) is then used to access and modify the DBM database. Previously, you could use dbmopen( ) to open, read, write, and delete a database, but while dbmopen( ) remains available, you should use the AnyDBM module that’s always suited to your underlying DBM implementation.[1]

For example, with AnyDBM:

#!/usr/local/bin/perl -w

    use AnyDBM_File;
    use Fcntl; # needed for O_ thingies

    my %h;
    my $db_name = 'perl_in_a_nutshell2.dbmx';

    # tie %h. will fail if $db_name can't be created and $db_name can't be 
    # written
    tie(%h, 'AnyDBM_File', $db_name, O_RDWR|O_CREAT, 0640)
        or die("can't create \%h: $!");

    # Populate %h
    foreach my $letter ('a' .. 'z') {
        $h{$letter} = uc($letter);
    }

    while(my($key, $value) = each(%h)) {
        print "$key -> $value\n";
    }

    untie(%h);

The %ARRAYNAME parameter is a Perl hash. (If it already has values, the values are discarded under ...

Get Perl in a Nutshell, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.