内容

名称

ODBM_File - 绑定访问 odbm 文件

概要

use Fcntl;   # For O_RDWR, O_CREAT, etc.
use ODBM_File;

 # Now read and change the hash
 $h{newkey} = newvalue;
 print $h{oldkey}; 
 ...

 untie %h;

描述

ODBM_File 在 Perl 哈希变量和 ODBM_File 格式的文件之间建立连接。您可以像操作 Perl 哈希一样操作文件中的数据,但在程序退出时,数据将保留在文件中,以便在下次程序运行时使用。

使用 Perl 内置的 tie 函数与 ODBM_File 建立变量和文件之间的连接。tie 的参数应该是

  1. 您要绑定的哈希变量。

  2. 字符串 "ODBM_File"。(这告诉 Perl 使用 ODBM_File 包来执行哈希的功能。)

  3. 您要绑定到哈希的文件的名称。

  4. 标志。使用以下之一

    O_RDONLY

    对文件中的数据进行只读访问。

    O_WRONLY

    对文件中的数据进行只写访问。

    O_RDWR

    读写访问。

    如果您想在文件不存在的情况下创建它,请将O_CREAT添加到这些标志中的任何一个,如示例所示。如果您省略O_CREAT,并且文件不存在,则tie调用将失败。

  5. 如果创建新文件,则使用默认权限。实际权限将由用户的umask修改,因此您可能应该在此处使用0666。(参见"umask" in perlfunc。)

诊断

如果失败,tie调用将返回一个未定义的值,并且可能将$!设置为包含文件无法绑定的原因。

odbm store returned -1, errno 22, key "..." at ...

当您尝试存储过长键或值时,会发出此警告。这意味着更改未记录在数据库中。请参见下面的错误和警告。

安全性和可移植性

不要接受来自不可信来源的ODBM文件。

在现代Linux系统上,这些通常是GDBM文件,它们在平台之间不可移植。

GDBM文档没有暗示来自不可信来源的文件可以安全地与libgdbm一起使用。

不使用GDBM兼容性来支持旧的dbm的系统将使用特定于平台的库,可能继承自BSD系统,在这种情况下,使用不可信文件可能是安全的,也可能不是安全的。

恶意制作的文件可能会导致perl崩溃,甚至暴露安全漏洞。

错误和警告

您可以存储在ODBM文件中的数据大小存在一些限制。最重要的是,键的长度加上其关联值的长度不能超过1008字节。

参见"tie" in perlfuncperldbmfilterFcntl