http://paperlined.org/src/pl/jollies/backend/dbm/edhashtxt.pl
#!/usr/bin/perl
# allows the user to edit a value in a Berkeley DB, given its key
use strict;
use warnings;
use BerkeleyDB;
use Storable;
use File::Temp qw/ tempfile tempdir /;
use Safe;
use Data::Dumper;
@ARGV >= 2
or die "Syntax: $0 <db_file> <key>\n";
my $filename = shift;
my $key = shift;
#-e $filename or die "Please specify a valid db file.\n";
my $env = new BerkeleyDB::Env;
my %hash;
my $db = tie %hash, 'BerkeleyDB::Btree',
-Filename => $filename,
-Flags => DB_CREATE
or die "Cannot open file $filename: $! $BerkeleyDB::Error\n" ;
my $contents;
if (! exists $hash{$key}) {
print "Key '$key' did not exist. Creating.\n";
sleep(2);
$contents = '';
} else {
$contents = $hash{$key};
}
my ($fh, $tempfilename) = tempfile();
print $fh $contents;
close $fh;
while (1) {
system "vim", $tempfilename;
open FIN, "<$tempfilename" or die "Unable to read temporary file back in ('$filename'): $!\n";
$contents = do {local $/=undef; <FIN>};
close FIN;
#print "Got:\n$contents\n";
last;
}
unlink $tempfilename;
$hash{$key} = $contents;
Generated by GNU enscript 1.6.4.