dbm
または ndbm
ファイルと連想配列を bind
する。
ASSOC
は連想配列の名前である(似てはいるけれど、
普通の open
と違い、最初の引数はファイルハンドルではない)。
DBNAME
はデータベースの名前から
`.dir'または `.pag' の拡張子をとったものである。
データベースが存在しなければ、
MODE
で指定される protection で作成される。
古い dbm
関数しかサポートしていないシステムの場合は、
プログラム中で dbmopen
は一回しか実行することができない。
dbm
も ndbm
もないシステムで dbmopen
をコールすると
致命的エラーとなる。
dbmopen
の前の連想配列の値は失われる。
dbm
ファイルの値の一部はメモリにキャッシュされる。
これはデフォルトでは 64 個であるが、
dbmopen
に先立って連想配列にダミーの値を代入することで増やすことができる。
必要なら、reset
コマンドでキャッシュをフラッシュすることができる。
dbm
ファイルに書き込み許可がない場合、
連想配列の値を読むことはできても、代入はできない。
書き込みができるかどうかテストするのなら、ファイルテストを使うか、
eval
中でダミーの配列をセットしてみて、
エラーが起こるかどうかで判断することができる。
大きな dbm
ファイルの場合、
keys()
や values()
といった関数は巨大な配列を返すことがある。
each()
を用いて
大きな dbm
ファイルについて繰り返しを行いたい場合は、次の例を参照。
# ヒストリーファイルのオフセットを出力
dbmopen(HIST,'/usr/lib/news/history',0666);
while (($key,$val) = each %HIST) {
print $key, ' = ', unpack('L',$val), "\n";
}
dbmclose(HIST);