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.