Tie a large list of DB_Files

A

Antonio Gulli

I have a large list of DB_Files stored in a directory. I would like to
tie all of them to an array of hashes and to search them for key,
using the hashes.

My idea is rather simple:

my (@listOfHashes);
my ($numOfHashes);

sub loadDBs{

my ($dbDIR) = @_;
my ($numFiles) = 0;
my ($b) = new DB_File::BTREEINFO;
my ($file);

$numOfHashes = 0;

opendir(DIR, $dbDIR) || die "cannot opendir $dbDIR: $!";
while (defined($file = readdir(DIR))){

if ($file =~ /db\.*/){
tie %{ $listOfHashes[$numOfHashes] }, "DB_File", $file,
O_RDONLY, 0666, $b
|| die ("Cannot open $file");
$numOfHashes++;
print "Tied $file $numOfHashes\n";
}
}
}

sub dumpAll_Key_Value{

my ($key, $value);
for (my $i = 0; $i < $numOfHashes; $i++){
print "Load $i";
while (($key, $value) = keys %{ $listOfHashes[$i] }){
print ">$key< >$value<\n";
}
}
}

sub searchKey{

my ($key) = @_;
my ($fetched);
for (my $i = 0; $i < $numOfHashes; $i++){
if (defined ($fetched = $listOfHashes[$i]{$key})){
print "found $key on $i DB";
return $fetched;
}
}
return undef;
}

But neither searchKey() nor dumAll_Key_Value() seems to work,
while loadDBs() seems to tie the hashes...

Am i doing a trivial error or what? Any suggestion?

Thank you so much.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top