2010-03-26 5 views
3

나는 오늘 밤 길게 길을 찾으려고 노력했다. 나는 그것을 죽음으로 봤는데 예제의 예제 나 해킹이 끝나지 않았다. 이것이 꽤 쉬워야하는 것처럼 보이지만 나는 그것을 얻을 수 없다. 여기Perl 영구 데이터 저장 :: Data :: Dumper

#!/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"; 

그리고 내 출력됩니다 : 나는 TEST003 출력 내가 달성하기 위해 노력하고 정확히 무엇 이는 TEST001 출력과 동일 보이는 것을 말한다 읽어

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

모두 여기에 코드입니다 .

무엇이 여기에 있습니까? 다르게 "해야"할까요 아니면 내가 대신 "평가"해야합니까? 그렇다면 어떻게해야합니까?

어떤 도움을 주셔서 감사합니다 ...

답변

5

우리 모두는 그 저녁 있습니다! 시도 :

$complex_variable = do $MEMORY || die "Bad data"; 
+0

감사합니다. 저장 가능한 언급에 대해서는 – stephenmm

6

먼저 Data :: Dumper 대신 Storable.pm을 사용하는 것이 좋습니다. Storable은 이진 형식의 데이터 구조를 텍스트에서 다시 &으로 변환하지 않고도 보존 할 수있는 동결 방법을 동결합니다 (&).

둘째, 나는 이것을 시도하지 않았지만 당신이 "$ MEMORY"할 때 hashref를 저장하고있는 것처럼 보이지 않습니다. 평가가 주석 처리되었습니다. 시도 :

$complex_variable = eval $MEMORY; 
print Dumper($complex_variable)."TEST003\n"; 
+2

+1. – tJener

+1

저장 가능은 여기로가는 길입니다. 그리고 나는 그의 CPAN 디렉토리에 가장 최근의 Data :: Dumper 업로드를 가지고있는 사람으로 이것을 말합니다. – tsee

+1

출력을 사람이 읽을 수 있도록하려면 Data :: Dump :: Streamer가 좋습니다. – jrockway

1

나는 이것을 위해 DBM::Deep을 좋아하는 경향이 있습니다. 그러나 데이터베이스 서버가 부족한 모든 것에 대해 이야기하는 Mastering Perl의 "Lightweight Persistence"에 대한 전체 장을 제공합니다.

+0

내 데이터 세트가 커지기 시작하면 조사하겠습니다. – stephenmm

+0

음, 제가 이야기하는 내용은 작은 데이터 세트입니다. :) –

관련 문제