Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 保存树状结构_Perl_Persistence - Fatal编程技术网

Perl 保存树状结构

Perl 保存树状结构,perl,persistence,Perl,Persistence,我有以下树状结构,其中每个级别由单独的类表示: Book ------ Page ------ Line 1 n 1 n 每个类都有一个包含其所有成员的属性(例如作为受祝福的引用数组的/g/Book::pages),一些特定于该级别的属性(例如Book::author)以及一些添加/删除其成员的方法 现在我想将所有数据保存/加载到单个文件中。它不会是一个关系数据库(很可能会使用YAML),因此基本上我需要在某个时候得到如下内容: my $book = {

我有以下树状结构,其中每个级别由单独的类表示:

Book ------ Page ------ Line
     1    n      1    n
每个类都有一个包含其所有成员的属性(例如作为受祝福的引用数组的/g/
Book::pages
),一些特定于该级别的属性(例如
Book::author
)以及一些添加/删除其成员的方法

现在我想将所有数据保存/加载到单个文件中。它不会是一个关系数据库(很可能会使用YAML),因此基本上我需要在某个时候得到如下内容:

my $book = {
    author  => "Fred Flinstone",
    name    => "My Favorite Stones",
    pages   => [
        {
            number  => 1,
            footer  => "Dedicated to Wilma",
            lines   => [ ],
        },
        {
            number  => 2,
            lines   => [
                { text => "Preface", style => "h1" },
                { text => "This book is about my favorite stones:" },
                { text => "Marble" },
                # ...
            ]
        },
        # ...
    ]
};
书中是否应该有一对聪明的方法了解所有成员类?或者每个类是否应该实现它的一部分,例如,
Line::save
返回类似
{text=>“Marble”}

正确的方法是什么?我希望解决方案是尽可能少地限制到实际数据。如果我明天决定添加
Page::bookmarks
并想保存
Bookmark
s怎么办


哦,我正在使用Moose,虽然这不会有太大的区别。

如果您正在使用Moose,我建议您查看以处理此问题。您可以在包中使用此模块,然后添加
存储('format'=>'YAML','io'=>'File')

这个简单的例子可以帮助您开始:

package Book;
use Moose;
use MooseX::Storage;

with Storage('format' => 'YAML', 'io' => 'File');

...

1;

my $book = Book->new();

...

# to store object
$book->store('book.yml');

# to get object back
my $book2 = Book->load('book.yml');

如果您使用的是驼鹿,我建议您查看以处理此问题。您可以在包中使用此模块,然后添加
存储('format'=>'YAML','io'=>'File')

这个简单的例子可以帮助您开始:

package Book;
use Moose;
use MooseX::Storage;

with Storage('format' => 'YAML', 'io' => 'File');

...

1;

my $book = Book->new();

...

# to store object
$book->store('book.yml');

# to get object back
my $book2 = Book->load('book.yml');

您可以使用
Storable
模块序列化和还原祝福对象。您可以使用
Storable
模块序列化和还原祝福对象。