Dear All,
i hope that someone can help me.
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.
--
|