5

ハッシュのハッシュをシリアル化し、それを逆シリアル化して元のハッシュのハッシュを取得しようとしています..問題は、逆シリアル化するたびに..自動生成された $var1 を追加することです。

元のハッシュ

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

$VAR1 = { 'シンプソンズ' => { '子供' => 'バート', '妻' => 'マージ', '夫' => 'ホーマー' }, 'フリントストーン' => { '夫' => 'フレッド', 'パル' => 'バーニー' }, };

$var1 なしでハッシュの元のハッシュを取得する方法はありますか..??

4

2 に答える 2

9

Storable が完全に機能することが証明されました。これ$VAR1は、Data::Dumper のシリアル化の一部です。

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));

ご覧のとおり、オリジナルとコピーの両方が同一です。

$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'
                           }
        };
于 2012-07-24T02:16:57.917 に答える
3

に設定$Data::Dumper::Terseする1と、Data::Dumper はこれらの変数名をスキップしようとします (ただし、結果は で解析できなくなる場合がありますeval)。

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

は次のようになります:

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

おそらく、JSONYAMLのようなものが目的に適しているでしょうか?

于 2012-07-24T02:33:24.340 に答える