http://qs321.pair.com?node_id=989268


in reply to Re: can't manage to use BerkeleyDB::Env
in thread can't manage to use BerkeleyDB::Env

Ok. Well, to tell the whole story I only used DB_File in this simple example.

The thing is that I already have a db which I know has an environnement in it (I've already opened it with an other perl program). What I wanted to do was to retrieve some data from its Env, so I wanted to explore a bit the structure of an BerkeleyDB::Env class.

So I tried to create a "detached" env:

use BerkeleyDB; my $env = new BerkeleyDB::Env -Home => "/tmp" or die "could not create env";

And then I do raise the "could not create" exception.

Shouldn't it be possible to create a brand new environnement, detached from any database?

Replies are listed 'Best First'.
Re^3: can't manage to use BerkeleyDB::Env
by Anonymous Monk on Aug 23, 2012 at 10:45 UTC
    Well, according to the docs, it is, provided you follow the docs (use flags)
    #!/usr/bin/perl -- use strict; use warnings; use Data::Dump; use BerkeleyDB; for my $opts ( [], [-Flags => DB_CREATE| DB_INIT_CDB | DB_INIT_MPOOL] + ){ my $env = BerkeleyDB::Env->new( -Home => './home', @$opts, ) or warn "cannot open environment: $BerkeleyDB::Error\n"; dd $env, [ glob './home/*' ]; } __END__

    On first run it doesn't exist, so first try, without flags, fails -- you need flags to initialize

    $ perl berkeleydb.env.pl cannot open environment: No such file or directory (undef, []) ( bless([12346044], "BerkeleyDB::Env"), [ "./home/__db.001", "./home/__db.002", "./home/__db.003", "./home/__db.004", ], )

    On second run both tries work, because its already initialized

    $ perl berkeleydb.env.pl ( bless([10087228], "BerkeleyDB::Env"), [ "./home/__db.001", "./home/__db.002", "./home/__db.003", "./home/__db.004", ], ) ( bless([12336228], "BerkeleyDB::Env"), [ "./home/__db.001", "./home/__db.002", "./home/__db.003", "./home/__db.004", ], )

      Ok, thanks.

      I was mis-leaded by the following statement in the BerkeleyDB man page:

      « All the parameters to the BerkeleyDB::Env constructor are optional. »

      Well, not so true then.

        Well, not so true then.

        :) Well sure its true :) its just that success isn't guaranteed -- its like open, even filename is optional, but it doesn't mean you'll open a file