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,
You might try : "$dbDIR/$file" instead of $file to pick up the full
path to the file.
O_RDONLY, 0666, $b
|| die ("Cannot open $file");
$numOfHashes++;
print "Tied $file $numOfHashes\n";
}
}
Added print Dumper([EMAIL PROTECTED]); here
}
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?
You could also try dumping listOfHashes using Data::Dumper and
see what you get.
And obtained (this is a directory with just a DB file, so i have
just one hash inside, the same happens with directory with many files).
$VAR1 = [
{}
];
So the hash is empty, but why the tie operation does not fail ?
Should the hash be empty when i tie it to a DB_File?
|