X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FAnyDBM_File.pm;h=9cf9b3183434156ec8d464bbe2c01f95591bbcc2;hb=9426adcd48655815b65cea5a9f1eebbe7e23a9df;hp=50acce412a47cd98c2c5f4a88f575eace24240b4;hpb=f06db76b9e41859439aeadb79feb6c603ee741ff;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/AnyDBM_File.pm b/lib/AnyDBM_File.pm index 50acce4..9cf9b31 100644 --- a/lib/AnyDBM_File.pm +++ b/lib/AnyDBM_File.pm @@ -1,18 +1,24 @@ package AnyDBM_File; +use vars qw(@ISA); @ISA = qw(NDBM_File DB_File GDBM_File SDBM_File ODBM_File) unless @ISA; -eval { require NDBM_File } || -eval { require DB_File } || -eval { require GDBM_File } || -eval { require SDBM_File } || -eval { require ODBM_File }; +my $mod; +for $mod (@ISA) { + if (eval "require $mod") { + @ISA = ($mod); # if we leave @ISA alone, warnings abound + return 1; + } +} + +die "No DBM package was successfully found or installed"; +#return 0; =head1 NAME AnyDBM_File - provide framework for multiple DBMs -NDBM_File, ODBM_File, SDBM_File, GDBM_File - various DBM implementations +NDBM_File, DB_File, GDBM_File, SDBM_File, ODBM_File - various DBM implementations =head1 SYNOPSIS @@ -27,20 +33,14 @@ L), GDBM, SDBM (which is always there--it comes with Perl), and finally ODBM. This way old programs that used to use NDBM via dbmopen() can still do so, but new ones can reorder @ISA: - @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File); - -Note, however, that an explicit use overrides the specified order: - - use GDBM_File; - @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File); - -will only find GDBM_File. + BEGIN { @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File) } + use AnyDBM_File; Having multiple DBM implementations makes it trivial to copy database formats: use POSIX; use NDBM_File; use DB_File; - tie %newhash, DB_File, $new_filename, O_CREAT|O_RDWR; - tie %oldhash, NDBM_File, $old_filename, 1, 0; + tie %newhash, 'DB_File', $new_filename, O_CREAT|O_RDWR; + tie %oldhash, 'NDBM_File', $old_filename, 1, 0; %newhash = %oldhash; =head2 DBM Comparisons @@ -87,6 +87,6 @@ By default, but can be redefined. =head1 SEE ALSO -dbm(3), ndbm(3), DB_File(3) +dbm(3), ndbm(3), DB_File(3), L =cut