0

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

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

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

我一直在使用诸如“tie”、“DBM”和“filehandle”之类的关键字进行搜索,但搜索结果倾向于将文件句柄与事物联系起来,而不是将事物与文件句柄联系起来。

有什么建议么?

4

2 回答 2

3

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

如果您只是将 MLDBM 用于持久性,而不是因为数据库太大而无法存储,那么您可以尝试不同的方法。使用Storable来持久化你的数据结构。它可以读取和写入已经打开的文件句柄。

于 2010-06-12T18:51:22.213 回答
2

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

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

有了有关您的应用程序的更多信息,我们可以提供对您更有用的建议。

于 2010-06-12T18:51:20.903 回答