--- loncom/debugging_tools/dump_db.pl 2002/09/04 20:49:16 1.2 +++ loncom/debugging_tools/dump_db.pl 2005/03/18 21:36:49 1.5 @@ -4,7 +4,7 @@ # # dump_db.pl - dump a GDBM database to standard output, unescaping if asked to. # -# $Id: dump_db.pl,v 1.2 2002/09/04 20:49:16 matthew Exp $ +# $Id: dump_db.pl,v 1.5 2005/03/18 21:36:49 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -32,13 +32,15 @@ use strict; use Getopt::Long; use GDBM_File; +use Data::Dumper; +use Storable qw(thaw); # # Options -my $unesc = 0; -my $help = 0; +my ($unesc,$help,$localize_times) = (0,0,0); GetOptions("unescape" => \$unesc, "u" => \$unesc, + "t" => \$localize_times, "help" => \$help); # @@ -52,7 +54,8 @@ database. Options: --help Display this help. --unescape Unescape the keys and values before printing them out. - --u Same as --unescape + -u Same as --unescape + -t Localize times when possible (human readable times) Examples: dump_db.pl mydata.db dump_db.pl mydata.db yourdata.db ourdata.db theirdata.db @@ -65,16 +68,22 @@ END # Loop through ARGV getting files. while (my $fname = shift) { my %db; - if (! tie(%db,'GDBM_File',$fname,&GDBM_READER,0640)) { + if (! tie(%db,'GDBM_File',$fname,&GDBM_READER(),0640)) { warn "Unable to tie to $fname"; next; } while (my ($key,$value) = each(%db)) { + if ($value =~ s/^__FROZEN__//) { + $value = thaw(&unescape($value)); + } if ($unesc) { $key = &unescape($key); - $value = &unescape($value); + $value = &unescape($value) if (! ref($value)); + } + if ($localize_times && ! ref($value)) { + $value =~ s/([0-9]{10,10})/localtime($1)/ge; } - print "$key = $value\n"; + print "$key = ".(ref($value)?Dumper($value):$value)."\n"; } untie %db; }