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?

Reply via email to