我正在使用MLDBM来保留一些Perl数据结构,我想知道是否有以下替代方法:
tie %hash, "MLDBM", $dbm_file, O_CREAT | O_RDWR, 0644;
首先,我喜欢能够使用STDOUT,而不是已知的文件名。然后可以将其重定向到shell端的文件。
我一直在搜索“tie”,“DBM”和“filehandle”之类的关键字,但是这些文章倾向于讨论将文件句柄绑定到事物上,而不是文件句柄。
有什么建议吗?
答案 0 :(得分:3)
好吧,MLDBM无关紧要,因为它只是将参数传递给基础dbm库(例如DB_File或GDBM_File)。但我不知道任何接受文件句柄而不是文件名的dbm库。此外,dbm文件需要是可搜索的,因此shell必须重定向到实际文件,而不是管道。并且STDOUT可能会以只写方式打开,这对dbm文件不起作用。
如果您只是使用MLDBM进行持久化,而不是因为数据库对于内存来说太大,那么您可以尝试不同的方法。使用Storable来保留您的数据结构。它可以阅读&写入已经打开的文件句柄。
答案 1 :(得分:2)
请记住,STDOUT
是一个流,一个必须像磁带一样顺序读取的字节序列。 DBM模块提供面向记录的持久性,您可以在其中读取和写入任意记录。
要伪造STDOUT
上的DBM,您需要输出某种日记格式。写入STDOUT
似乎比使用DBM具有更高的优先级,因此可能更适合使用不同的格式。
有关您的申请的更多信息,我们可以提供对您更有用的建议。