4

XML::Dumper を使用して次のデータ構造をシリアル化しようとしています

'options_settings' => {
  'telnet.distinct.enable' => {
    'text' => 'Option telnet.distinct.enable needs to be set to \'on\' as of
 workaround for Bug 476803',
    'severity' => '7'
   }
 },
'EOS_details' => {
  '338' => bless( {
    'info' => '<a href="https://support.netapp.com/info/communications/ECMP1110462.html " target="_blank">  CPC-0705-02 </a>',
    'count' => '48',
    'ASUP_id' => 'AE20121117202086',
    'part' => 'ESH2 - X5511A-RC, X5511-RC-C',
    'category' => 'I/O Module',
    'EOS_date' => '06/02/2013',
    'severity' => '8'
   }, 'EOSObject' ),

問題は、XML:Dumper を使用して xml に解析すると、2 つの個別のハッシュ参照に同じメモリ アドレスが使用されることです。

  <item key="338">
   <hashref blessed_package="EOSObject" memory_address="0x295b5758">
    <item key="ASUP_id">AE20121117165273</item>
    <item key="EOS_date">06/02/2013</item>
    <item key="category">I/O Module</item>
    <item key="count">48</item>
    <item key="info">&lt;a href=&quot;https://support.netapp.com/info/communications/ECMP1110462.html &quot; target=&quot;_blank&quot;&gt;  CPC-0705-02 &lt;/a&gt;</item>
    <item key="part">ESH2 - X5511A-RC, X5511-RC-C</item>
    <item key="severity">8</item>
   </hashref>
  </item>
 </hashref>
<item key="options_settings">
 <hashref memory_address="0x295b5320">
  <item key="telnet.distinct.enable">
   <hashref memory_address="0x295b5758">
   </hashref>
  </item>
 </hashref>
</item>

memory_address="0x295b5758" に注意してください。

したがって、ファイルから読み戻すとき、option_settings ハッシュ参照は EOS オブジェクトを指します:/

それは XML::Dumper のバグですか、それとも何か間違っていますか? 最新の XML::Dumper 0.81 を使用する

PSメインスクリプトの外で再現しようとしましたが、動作します。それでも、メイン スクリプトでデータが破損した理由を理解できません。これは XML::Dumper が使用されるコードです:

    DEBUG("Before serialization: " . Data::Dumper::Dumper($result));
    my $dump = new XML::Dumper;
    my $dump_test = new XML::Dumper;
    my $test_xml = $dump_test->pl2xml ($result);
    DEBUG("After serialization in memory: " . Data::Dumper::Dumper($test_xml));
    $dump->pl2xml( $result, $filename );

結果は正常に出力されます。「options_settings」は別のエントリです。$test_xml では、すでに EOS_details と混同されています

4

1 に答える 1