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

まず、Data::Dumper の代わりに Storable.pm を使用することをお勧めします。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に「Lightweight Persistence」に関する完全な章があり、データベース サーバー以外のすべてについて説明しています。

于 2010-03-26T17:09:25.547 に答える