O'Reilly logo

Programming the Perl DBI by Alligator Descartes, Tim Bunce

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Inserting and Retrieving Values

Inserting data into a Berkeley DB using the Perl DB_File module is extremely simple as a result of using a tied hash or tied array . The association of a DBM file and a Perl data structure is created when the database is opened. This allows us to manipulate the contents of the database simply by altering the contents of the Perl data structures.

This system makes it very easy to store data within a DBM file and also abstracts the actual file-related operations for data manipulation away from our scripts. Thus, the Berkeley DB is a higher-level storage manager than the simple flat-file databases discussed earlier in this chapter.

The following script demonstrates the insertion and retrieval of data from a DBM file using a tied hash. This hash has the Perl characteristic of being a key/value pair. That is, values are stored within the hash table against a unique key. This affords extremely fast retrieval and an element of indexed data access as opposed to sequential access. For example:

#!/usr/bin/perl -w # # ch02/DBM/simpleinsert: Creates a Berkeley DB, inserts some test data # and dumps it out again use DB_File; use Fcntl ':flock'; ### Initialize the Berkeley DB my %database; my $db = tie %database, 'DB_File', "simpleinsert.dat", O_CREAT | O_RDWR, 0666 or die "Can't initialize database: $!\n"; my $fd = $db->fd(); open DATAFILE, "+<&=$fd" or die "Can't safely open file: $!\n"; print "Acquiring exclusive lock..."; flock( DATAFILE, LOCK_EX ) or die "Unable ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required