如何持久化大型Perl对象以在运行之间重复使用?

如何持久化大型Perl对象以在运行之间重复使用?,perl,serialization,persistence,Perl,Serialization,Persistence,我有一个很大的XML文件,用它进行解析需要40多秒 我希望能够缓存生成的解析对象,以便在下一次运行时只检索解析对象,而不重新解析整个文件 我已经介绍了如何使用,但是文档中有点缺少如何从磁盘文件中存储和检索其输出。我看过的其他类(例如,似乎设计用于存储许多小对象,而不是单个大对象) 有人能推荐一个专门为此设计的模块吗 编辑。XML文件是,我同意加快后续运行。更改XML解析器需要进行非常重要的代码更改 在我的Mac Pro基准上,使用vs读取整个文件的数据如下: Data::Dumper实际上非常简

我有一个很大的XML文件,用它进行解析需要40多秒

我希望能够缓存生成的解析对象,以便在下一次运行时只检索解析对象,而不重新解析整个文件

我已经介绍了如何使用,但是文档中有点缺少如何从磁盘文件中存储和检索其输出。我看过的其他类(例如,似乎设计用于存储许多小对象,而不是单个大对象)

有人能推荐一个专门为此设计的模块吗

编辑。XML文件是,我同意加快后续运行。更改XML解析器需要进行非常重要的代码更改

在我的Mac Pro基准上,使用vs读取整个文件的数据如下:


Data::Dumper实际上非常简单。如果您的对象是hashref
$hashref

# Write
open(FILE, ">your_filename") || die "Can not open: $!";
print FILE Data::Dumper->Dump([$HashRef],["HashRef"]);
close(FILE) || die "Error closing file: $!";

# Read
my $HashRef;
$HashRef = eval { do "your_filename" };
   # Might need "no strict;" before and "use strict;" after "do"
die "Error reading: $@" if $@;
# Now $HashRef is what it was before writing

另一个好的选择是使用。从POD:

use Storable;
store \%table, 'file';
$hashref = retrieve('file');

有关各种选项的非常好的指南(以及Data::Dumper用法的更好示例),请参见。这是懒惰的答案。()

与数据转储相反的是


好的答案是:您确实想学习使用适合于繁重处理(如或加速解析)的XML模块,因此您不需要这种缓存猴子代码。

(1)无论怎样,学习使用可存储或等效模块都是一个好工具;(2)如果他做了一些繁重的(预处理)在处理XML时,onm缓存的原始数据结构可以节省大量资源。⑴ 正是因为这个原因,我才把它从我的答案中删去。☺ ⑵ 推测,我们不知道用例。在一个文件中,转储的反面是
do
,当XML::Simple开始给您带来痛苦时,是时候停止使用它并转向更好的解决方案了。该模块实际上就是为了它所说的:简单的事情。唯一的痛苦是speed-XML::Simple的plan Perl DSC输出对我来说是完美的要求。可能他们在不同的时间或针对不同的会话屏蔽不同的页面。我记得,一年前的几天,我就能够获得所有学习Perl的内容(这就是为什么我认为Google屏蔽任何页面都是站不住脚的)@brian-有点切题-我一直想知道一个作家对在谷歌图书上出版他们的书的看法是什么…你对此感到舒服吗?收入被骗?相反?(免费推广)?也许如果你在一次会议上遇到我,我会告诉你,但我对此没有什么好的想法,而且这比大多数人想象的要复杂得多。:)什么是增加回报的最佳购买方式?@Alnitak:在brian的用户资料或网页上使用brian的亚马逊附属链接;)
use Storable;
store \%table, 'file';
$hashref = retrieve('file');