With regard to BerkelyDB => RTFM. You can't just make syntax up and expect it to work. This works fine.....
[root@www mail]# cat reader.pl
#!/usr/bin/perl
use BerkeleyDB;
tie %hash, 'BerkeleyDB::Hash', -Filename => $ARGV[0]
or die "can't read file '$ARGV[0]': $!";
print map { " $_ => $hash{$_}\n" } sort keys %hash;
[root@www mail]# ./reader.pl virtusertable.db
@blech.com.au => blech.com.au
[snip]
With regard to your second example, once again you need to RTFM. You have a syntax error in that DB_HASH is a $PERL_SCALAR not a constant as you assume. I would agree with your C style brain that it should logically be a constant but I did not design the interface.....
tie %hash, 'DB_File', $file, O_RDONLY, 0666, $DB_HASH