summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChip Salzenberg <chip@perl.com>1996-09-06 09:14:21 +1200
committerChip Salzenberg <chip@atlantic.net>1997-04-03 10:03:25 +1200
commit34d04c8d9a0f251c651e2f9860ac3ffc476d363d (patch)
treeba03779f3e933ed3e6efbd67f765d56da2822b74
parent074f619b840614cd44c6b359816bd2bdd96db003 (diff)
downloadperl-34d04c8d9a0f251c651e2f9860ac3ffc476d363d.tar.gz
Limit @ISA to actual DBM in AnyDBM
-rw-r--r--lib/AnyDBM_File.pm19
1 files changed, 8 insertions, 11 deletions
diff --git a/lib/AnyDBM_File.pm b/lib/AnyDBM_File.pm
index e6a15033c3..aff3c7cdec 100644
--- a/lib/AnyDBM_File.pm
+++ b/lib/AnyDBM_File.pm
@@ -1,11 +1,14 @@
package AnyDBM_File;
-use vars qw(@ISA);
+use vars qw(@ISA);
@ISA = qw(NDBM_File DB_File GDBM_File SDBM_File ODBM_File) unless @ISA;
my $mod;
for $mod (@ISA) {
- return 1 if eval "require $mod"
+ if (eval "require $mod") {
+ @ISA = ($mod); # if we leave @ISA alone, warnings abound
+ return 1;
+ }
}
die "No DBM package was successfully found or installed";
@@ -15,7 +18,7 @@ die "No DBM package was successfully found or installed";
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
@@ -30,14 +33,8 @@ L<DB_File>), 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: