14.3. Converting Between DBM FilesProblemYou have a file in one DBM format, but another program expects input in a different DBM format. SolutionReads the keys and values from the initial DBM file and writes them to a new file in the different DBM format as in Example 14.2 . Example 14.2: db2gdbm#!/usr/bin/perl -w # db2gdbm: converts DB to GDBM use strict; use DB_File; use GDBM_File; unless (@ARGV == 2) { die "usage: db2gdbm infile outfile\n"; } my ($infile, $outfile) = @ARGV; my (%db_in, %db_out); # open the files tie(%db_in, 'DB_File', $infile) or die "Can't tie $infile: $!"; tie(%db_out, 'GDBM_File', $outfile, GDBM_WRCREAT, 0666) or die "Can't tie $outfile: $!"; # copy (don't use %db_out = %db_in because it's slow on big databases) while (my($k, $v) = each %db_in) { $db_out{$k} = $v; } # these unties happen automatically at program exit untie %db_in; untie %db_out; Call the program as: % db2gdbm /tmp/users.db /tmp/users.gdbm Discussion
When multiple types of DBM file are used in the same program, you have to use
Copying hashes by simple assignment, as in See AlsoThe documentation for the standard modules GDBM_File, NDBM_File, SDBM_File, DB_File, also in Chapter 7 of Programming Perl ; Recipe 14.1 |
|