内容

名称

AnyDBM_File - 提供多个 DBM 的框架

NDBM_File、DB_File、GDBM_File、SDBM_File、ODBM_File - 各种 DBM 实现

概要

use AnyDBM_File;

描述

该模块是一个“纯虚基类”——它本身没有任何内容。它只是为了从各种 DBM 包中继承。出于与 Perl 4 的兼容性原因,它优先使用 ndbm,然后是 Berkeley DB(请参阅 DB_File)、GDBM、SDBM(它始终存在——它随 Perl 提供),最后是 ODBM。这样,过去通过 dbmopen() 使用 NDBM 的旧程序仍然可以这样做,但新程序可以重新排序 @ISA

BEGIN { @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File) }
use AnyDBM_File;

拥有多个 DBM 实现使复制数据库格式变得非常简单

use Fcntl; use NDBM_File; use DB_File;
tie %newhash,  'DB_File', $new_filename, O_CREAT|O_RDWR;
tie %oldhash,  'NDBM_File', $old_filename, 1, 0;
%newhash = %oldhash;

DBM 比较

以下是不同软件包提供的部分功能表

                         odbm    ndbm    sdbm    gdbm    bsd-db
			 ----	 ----    ----    ----    ------
 Linkage comes w/ perl   yes     yes     yes     yes     yes
 Src comes w/ perl       no      no      yes     no      no
 Comes w/ many unix os   yes     yes[0]  no      no      no
 Builds ok on !unix      ?       ?       yes     yes     ?
 Code Size               ?       ?       small   big     big
 Database Size           ?       ?       small   big?    ok[1]
 Speed                   ?       ?       slow    ok      fast
 FTPable                 no      no      yes     yes     yes
 Easy to build          N/A     N/A      yes     yes     ok[2]
 Size limits             1k      4k      1k[3]   none    none
 Byte-order independent  no      no      no      no      yes
 Licensing restrictions  ?       ?       no      yes     no
[0]

在混合 universe 机器上,可能在 bsd 兼容库中,该库通常被回避。

[1]

如果您为一种访问方法编译,则可以进行修剪。

[2]

请参阅 DB_File。需要符号链接。

[3]

默认,但可以重新定义。

另请参阅

dbm(3)、ndbm(3)、DB_File(3)、perldbmfilter