2012-07-24 8 views
4

해시 해시를 직렬화하고 해시의 원래 해시를 다시 직렬화하려고합니다. 문제는 내가 직렬화 해제 할 때마다입니다. 자동 생성 된 $ var1을 추가합니다.Perl 직렬화 및 해시의 해시 값 해설

원래 해시

%hash=(flintstones => { 
    husband => "fred", 
    pal  => "barney", 
}, 
jetsons => { 
    husband => "george", 
    wife  => "jane", 
    "his boy" => "elroy", 
}, 
); 

은 = { '심슨 가족'=> { '아이'=> '바트' $ VAR1, '아내'=> '마지', '로 나온다 남편 => '홈런' } '플린트'=> { '남편'=> '프레드' '친구'=> '바니' } };

거기에 $ var1 ..없이 해시의 원래 해시를 얻을 수있는 방법은 무엇입니까 ??

+0

'$ VAR1'은 앞에 붙이지 않습니다. 그것은 직렬화의 일부입니다. 당신이 그것을 deserialise 후 다른 해시를 준다라고 생각하게 만드는 이유는 무엇입니까? 어떻게 그것을 deserialise합니까? – ikegami

+1

개인적으로 JSON :: XS를 사용하여 JSON에 serialize합니다. Data :: Dumper는 디버깅 도구이며 좋은 serialiser는 아닙니다. 특히 기본 옵션이 아닙니다. – ikegami

+0

나는 Freeze/thaw ...를 사용하여 직렬화/역 직렬화를 수행했습니다. 원래 계산을 할 수 있도록 해쉬를 가져야합니다. – user1547285

답변

8

Storable이 완벽하게 정상적으로 작동 함을 입증했습니다. $VAR1은 Data :: Dumper의 직렬화의 일부입니다. 당신이 $Data::Dumper::Terse1에, 다음 데이터 : 덤퍼이 변수 이름을 생략하려고합니다 설정하면

$VAR1 = { 
      'jetsons' => { 
         'his boy' => 'elroy', 
         'wife' => 'jane', 
         'husband' => 'george' 
         }, 
      'flintstones' => { 
          'husband' => 'fred', 
          'pal' => 'barney' 
          } 
     }; 
$VAR1 = { 
      'jetsons' => { 
         'his boy' => 'elroy', 
         'wife' => 'jane', 
         'husband' => 'george' 
         }, 
      'flintstones' => { 
          'husband' => 'fred', 
          'pal' => 'barney' 
          } 
     }; 
+0

감사합니다 ... 덤퍼에 대해 알지 못했습니다. – user1547285

3

(하지만 :

use Storable  qw(freeze thaw); 
use Data::Dumper qw(Dumper); 

my %hash1 = (
    flintstones => { 
     husband => "fred", 
     pal  => "barney", 
    }, 
    jetsons => { 
     husband => "george", 
     wife  => "jane", 
    "his boy" => "elroy", 
    }, 
); 

my %hash2 = %{thaw(freeze(\%hash1))}; 

print(Dumper(\%hash1)); 
print(Dumper(\%hash2)); 

당신이 볼 수 있듯이, 원본과 사본 모두 동일 결과는 때때로 더 이상 해석 할 수 없습니다 eval).

use Data::Dumper; 
$Data::Dumper::Terse = 1; 
print Dumper \%hash; 

지금이된다 :

{ 
    'jetsons' => { 
       'his boy' => 'elroy', 
       'wife' => 'jane', 
       'husband' => 'george' 
       }, 
    'flintstones' => { 
        'husband' => 'fred', 
        'pal' => 'barney' 
        } 
} 

어쩌면 JSON 또는 YAML 같은 당신의 목적을 위해 더 나은 것입니까?