推荐哪些Perl模块可以序列化Moose对象?
我通常将推荐哪些Perl模块可以序列化Moose对象?,perl,serialization,yaml,moose,coderef,Perl,Serialization,Yaml,Moose,Coderef,我通常将Storable与nstore一起使用,但现在我有了一个code,显然Storable不喜欢这样 我找到了YAML(和YAML::XSwhich)。 我还尝试了一点,但没有多大成功 还有其他选择吗? 你推荐什么?我相信你可以序列化代码引用。不过我自己也没用过。看看吧,它的设计是为了和,所以它应该真的能覆盖所有的角落(注意,我自己没有试过,但我一直想!) /I3az/您可以在将$Data::Dumper::Deparse设置为真值后使用转储coderef,但这仅用于调试目的,不用于序列化
Storable
与nstore
一起使用,但现在我有了一个code
,显然Storable
不喜欢这样
我找到了YAML
(和YAML::XS
which)。
我还尝试了一点,但没有多大成功
还有其他选择吗?
你推荐什么?我相信你可以序列化代码引用。不过我自己也没用过。看看吧,它的设计是为了和,所以它应该真的能覆盖所有的角落(注意,我自己没有试过,但我一直想!)
/I3az/您可以在将
$Data::Dumper::Deparse
设置为真值后使用转储coderef,但这仅用于调试目的,不用于序列化
我建议您回到Moose::Storage不适合您的原因上来,因为作者非常努力地为Moose对象序列化提供一个抽象良好且健壮的解决方案
更新:您似乎遇到了序列化
\u offset\u sub
属性的问题,如中所述。由于该属性有一个构建器,并且它的构造相当简单(它只查看另一个属性的当前值),因此您根本不需要序列化它——当您反序列化对象并希望再次使用它时,第一次调用$this->offset
时将调用该构建器。因此,您应该能够将其标记为“不序列化”:
最后,这有点正交,但您可以折叠偏移量
\u offset\u sub
使用本机属性“code”特征将属性组合在一起:
has offset => (
is => 'bare',
isa => 'CodeRef',
traits => [ qw(Code DoNotSerialize) ],
lazy => 1,
builder => '_build_offset',
init_arg => undef,
handles => {
offset => 'execute_method',
},
);
sub _build_offset {
my ($self) = @_;
# same as previous _build_offset_sub...
}
MooseX::存储是推荐的方法。您能否具体说明您在it方面遇到的问题?(也可以随意访问irc.perl.org#moose)为什么要转储代码引用?@brian d foy:我真的不想。请参阅OP中链接的模块。如果您对如何在不使用coderefs的情况下序列化此对象有任何建议,我很乐意采纳。@Ether:首先,
MooseX:Storage
dors不支持coderefs(),我的问题更多的是指“告诉我们您在做什么,以及为什么您认为这是一个解决方案”。你的问题没有背景。你在这里得到了足够的反馈,知道你应该告诉我们你在做什么,而不是孤立你认为问题是什么。如果这真的是你已经问过的同一个问题,选择一个问题并坚持下去,而不是重复努力。它可以,并且只要你理解它记录的警告就行。不过,如果可能的话,我会避免转储coderef。我目前正在查看KiokuDB
。这看起来很有趣,但实际上我需要序列化单个对象,或者一次只序列化几个对象。我不需要智能搜索等。对于我的情况,使用DB后端等似乎有些过分。KiokuDB实际上不是一个序列化引擎(尽管它有一个),而是一个对象存储。
has offset => (
is => 'bare',
isa => 'CodeRef',
traits => [ qw(Code DoNotSerialize) ],
lazy => 1,
builder => '_build_offset',
init_arg => undef,
handles => {
offset => 'execute_method',
},
);
sub _build_offset {
my ($self) = @_;
# same as previous _build_offset_sub...
}