我试图使用YAML
序列化一些(Moose)对象 - 只需使用YAML的Dump()
和Load()
。加载序列化对象后,在我添加带有原始模块名称的use
语句之前,它不起作用。如果我不使用use
,在尝试调用某个对象方法之前我不会收到任何错误,那么它会说它无法找到这个方法。
我认为加载所需的类是反序列化器工作的一部分,如果我没有弄错Storable
确实是自己做的。那么YAML有什么破坏了吗?
另外,我注意到模块的版本没有与序列化对象一起存储。有什么方法可以添加吗?
答案 0 :(得分:6)
序列化用于数据,而不是行为。 Perl中的对象只是一个有福的参考。 YAML和Storable序列化并存储数据(包括祝福),但这只是类的名称,而不是类本身。在反序列化对象时,您负责加载类(以及任何父类)。
在一般情况下,序列化程序无法加载该类。虽然约定是包(类)==文件名,但它不是必需的。模块可以定义它想要的任何包名称,也可以定义多个包。例如,我可能会编写一个名为AbstractSyntaxTree.pm的模块来定义类Node
,Branch
和Leaf
。
答案 1 :(得分:2)
另外,我注意到了该版本 模块没有存储 序列化对象。有什么方法可以添加吗?
不,对象只知道他们被祝福的包裹。您可以使用use Module VERSION
语法在两种环境中都需要某个版本的模块。