]> git.donarmstrong.com Git - bin.git/blobdiff - db-hash
add a VERBOSE flag to getmail
[bin.git] / db-hash
diff --git a/db-hash b/db-hash
index d9ad8af30d0746c9b89e9e35da16ef65ac5efcfb..9b159ff85d716e5d3ee484a37afc1f8e2bf34679 100755 (executable)
--- a/db-hash
+++ b/db-hash
@@ -1,9 +1,8 @@
 #! /usr/bin/perl
-# , and is released
+# db-hash creates databases and queries it, and is released
 # under the terms of the GPL version 2, or any later version, at your
 # option. See the file README and COPYING for more information.
-# Copyright 2009 by Don Armstrong <don@donarmstrong.com>.
-# $Id: perl_script 1432 2009-04-21 02:42:41Z don $
+# Copyright 2009-11 by Don Armstrong <don@donarmstrong.com>.
 
 
 use warnings;
@@ -27,6 +26,8 @@ db-hash - create a database and query using it
   --dump, -D dump dbname
   --missing-newline, -n output a newline for unhashed keys
   --include-key, -k output the key as well as the value
+  --reverse, -r reverse (values to key)
+  --key-to-itself map key to itself
   --debug, -d debugging level (Default 0)
   --help, -h display this help
   --man, -m display manual
@@ -52,6 +53,14 @@ Dump database to stdout
 
 Output the key as well as the value. (Off by default)
 
+=item B<--reverse>
+
+Map values to a key
+
+=item B<--key-to-itself>
+
+Map the key to itself (On by default in reverse hashes)
+
 =item B<--missing-newline,-n>
 
 If a key doesn't exist in the database, output a newline. (Forced on
@@ -102,6 +111,7 @@ GetOptions(\%options,
           'dump|D',
           'include_key|include-key|k!',
           'reverse|r!',
+          'key_to_itself|key-to-itself|K',
           'missing_newline|missing-newline|n!',
           'debug|d+','help|h|?','man|m');
 
@@ -132,6 +142,12 @@ else {
        die "Unable to open $db for writing: $!";
 }
 
+if ($options{reverse}) {
+    if (not exists $options{key_to_itself}) {
+       $options{key_to_itself} = 1;
+    }
+}
+
 if (not defined $options{include_key}) {
     $options{include_key} = $options{dump} ? 0 : 1;
 }
@@ -143,8 +159,8 @@ if ($options{update} or $options{create}) {
        chomp;
        my ($key,@val) = split /\t/;
        if ($options{reverse}) {
-           for my $val_key (@val) {
-               $fast_db{$val_key} = [make_list($fast_db{$val_key})//[],$key];
+           for my $val_key (@val,$options{key_to_itself}?$key:()) {
+               $fast_db{$val_key} = [make_list($fast_db{$val_key} // []),$key];
            }
        }
        else {