3

今晚我一直在努力解决这个问题。我已经用谷歌搜索了它,但没有一个例子或我对这些例子的破解完成它。看起来这应该很容易,但我就是无法理解。这是代码:

#!/usr/bin/perl -w
use strict;
use Data::Dumper;

my $complex_variable = {};
my $MEMORY = "$ENV{HOME}/data/memory-file";

$complex_variable->{ 'key' } = 'value';
$complex_variable->{ 'key1' } = 'value1';
$complex_variable->{ 'key2' } = 'value2';
$complex_variable->{ 'key3' } = 'value3';

print Dumper($complex_variable)."TEST001\n";

open M, ">$MEMORY" or die;
print M Data::Dumper->Dump([$complex_variable], ['$complex_variable']);
close M;

$complex_variable = {};
print Dumper($complex_variable)."TEST002\n";

# Then later to restore the value, it's simply:
do $MEMORY;
#eval $MEMORY;

print Dumper($complex_variable)."TEST003\n";   

这是我的输出:

$VAR1 = {
         'key2' => 'value2',
         'key1' => 'value1',
         'key3' => 'value3',
         'key' => 'value'
       };
TEST001
$VAR1 = {};
TEST002
$VAR1 = {};
TEST003    

我读到的所有内容都表明 TEST003 输出看起来应该与 TEST001 输出相同,这正是我想要实现的。

我在这里想念什么?我应该以不同的方式“做”,还是应该“评估”,如果是的话怎么做?

谢谢你的帮助...

4

3 回答 3

6

首先,我建议使用 Storable.pm 而不是 Data::Dumper。Storable 具有冻结和解冻方法,可以将数据结构保存为二进制形式,而无需将其转换为文本并从文本转换回来。

其次,我没有尝试过,但在我看来,当您“执行 $MEMORY”时,您并未存储 hashref。eval 已被注释掉。尝试:

$complex_variable = eval $MEMORY;
print Dumper($complex_variable)."TEST003\n";
于 2010-03-26T04:38:05.233 回答
5

我们都有那些晚上!尝试:

$complex_variable = do $MEMORY || die "Bad data";
于 2010-03-26T04:33:37.553 回答
1

我倾向于为此喜欢DBM::Deep但是,我在Mastering Perl中有一章关于“轻量级持久性”的完整章节讨论了数据库服务器之外的所有内容。

于 2010-03-26T17:09:25.547 回答