我可以使用文件句柄而不是文件名来创建DBM文件吗?

时间:2010-06-12 18:36:01

标签: perl dbm

我正在使用MLDBM来保留一些Perl数据结构,我想知道是否有以下替代方法:

tie %hash, "MLDBM", $dbm_file, O_CREAT | O_RDWR, 0644;

首先,我喜欢能够使用STDOUT,而不是已知的文件名。然后可以将其重定向到shell端的文件。

我一直在搜索“tie”,“DBM”和“filehandle”之类的关键字,但是这些文章倾向于讨论将文件句柄绑定到事物上,而不是文件句柄。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

好吧,MLDBM无关紧要,因为它只是将参数传递给基础dbm库(例如DB_FileGDBM_File)。但我不知道任何接受文件句柄而不是文件名的dbm库。此外,dbm文件需要是可搜索的,因此shell必须重定向到实际文件,而不是管道。并且STDOUT可能会以只写方式打开,这对dbm文件不起作用。

如果您只是使用MLDBM进行持久化,而不是因为数据库对于内存来说太大,那么您可以尝试不同的方法。使用Storable来保留您的数据结构。它可以阅读&写入已经打开的文件句柄。

答案 1 :(得分:2)

请记住,STDOUT是一个流,一个必须像磁带一样顺序读取的字节序列。 DBM模块提供面向记录的持久性,您可以在其中读取和写入任意记录。

要伪造STDOUT上的DBM,您需要输出某种日记格式。写入STDOUT似乎比使用DBM具有更高的优先级,因此可能更适合使用不同的格式。

有关您的申请的更多信息,我们可以提供对您更有用的建议。