內容

名稱

AnyDBM_File - 提供多個 DBM 的架構

NDBM_File、DB_File、GDBM_File、SDBM_File、ODBM_File - 各種 DBM 實作

語法

use AnyDBM_File;

說明

這個模組是一個「純虛擬基底類別」——它本身沒有任何東西。它只是用來繼承各種 DBM 套件。它偏好 ndbm,原因是與 Perl 4 相容,然後是 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]

在混合宇宙機器上,可能在 bsd 相容函式庫中,而這通常會被避開。

[1]

如果你編譯為一種存取方法,可以進行修剪。

[2]

請參閱 DB_File。需要符號連結。

[3]

預設如此,但可以重新定義。

另請參閱

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