perl - 如何将 Data::Dumper 输出转换回 Perl 数据结构?

标签 perl xml-simple

我想知道您是否可以阐明我这几天一直在做的代码。

我一直在尝试使用 XMLout() 和 XMLin() 方法将 Perl 解析的散列转换回 XML,并且使用这种格式非常成功。

#!/usr/bin/perl -w
use strict;

# use module
use IO::File;
use XML::Simple;
use XML::Dumper;
use Data::Dumper;
my $dump = new XML::Dumper;

my ( $data, $VAR1 );

Topology:$VAR1 = {  
   'device' => {  
    'FOC1047Z2SZ' => {  
      'ChassisID' => '2009-09',  
      'Error' => undef,  
      'Group' => {  
        'ID' => 'A1',  
        'Type' => 'Base'  
      },  
      'Model' => 'CATALYST',  
      'Name' => 'CISCO-SW1',  
      'Neighbor' => {},  
      'ProbedIP' => 'TEST',  
      'isDerived' => 0  
    }  
  },  
  'issues' => [  
    'TEST'  
  ]  
};  

# create object  
my $xml = new XML::Simple (NoAttr=>1,  
                           RootName=>'data',     
                           SuppressEmpty => 'true');  

# convert Perl array ref into XML document  
$data = $xml->XMLout($VAR1);  

#reads an XML file  
my $X_out = $xml->XMLin($data);  

# access XML data  
print Dumper($data);  
print "STATUS: $X_out->{issues}\n";  
print "CHASSIS ID: $X_out->{device}{ChassisID}\n";  
print "GROUP ID: $X_out->{device}{Group}{ID}\n";  
print "DEVICE NAME: $X_out->{device}{Name}\n";  
print "DEVICE NAME: $X_out->{device}{name}\n";  
print "ERROR: $X_out->{device}{error}\n";  

我可以毫无问题地访问 XML 中的所有元素。

但是当我尝试创建一个文件来存放解析后的散列时,问题出现了,因为我似乎无法访问所有的 XML 元素。我想,我无法使用以下代码解析文件。

#!/usr/bin/perl -w
use strict;
#!/usr/bin/perl

# use module
use IO::File;  
use XML::Simple;  
use XML::Dumper;  
use Data::Dumper;  
my $dump = new XML::Dumper;  

my ( $data, $VAR1, $line_Holder );

#this is the file that contains the parsed hash  
my $saveOut = "C:/parsed_hash.txt";  
my $result_Holder = IO::File->new($saveOut, 'r');  
while ($line_Holder = $result_Holder->getline){  
    print $line_Holder;  
}  

# create object  
my $xml = new XML::Simple (NoAttr=>1, RootName=>'data', SuppressEmpty => 'true');  
# convert Perl array ref into XML document  
$data = $xml->XMLout($line_Holder);  
#reads an XML file  
my $X_out = $xml->XMLin($data);  

# access XML data  
print Dumper($data);  
print "STATUS: $X_out->{issues}\n";  
print "CHASSIS ID: $X_out->{device}{ChassisID}\n";  
print "GROUP ID: $X_out->{device}{Group}{ID}\n";  
print "DEVICE NAME: $X_out->{device}{Name}\n";  
print "DEVICE NAME: $X_out->{device}{name}\n";  
print "ERROR: $X_out->{device}{error}\n";  

你知道我如何访问文本文件中的 $VAR1 吗?

问候,
新蜂_我

最佳答案

$data = $xml->XMLout($line_Holder); 

$line_Holder 只有文件的最后一行,而不是整个文件,也不是评估文件所产生的 perl hashref。尝试这样的事情:

my $ref = do $saveOut;

do 函数为您加载和评估文件。您可能希望分步执行,例如:

use File::Slurp "read_file";
my $fileContents = read_file( $saveOut );
my $ref = eval( $fileContents );

关于perl - 如何将 Data::Dumper 输出转换回 Perl 数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1005507/

相关文章:

multithreading - Perl 线程 : share GLOB between threads

mysql - 如何使用 Perl 根据 id 使用不同的值更新每个数据库记录?

.net - 在 .NET 中自动扩展数组?

regex - 在 Perl 中编辑/匹配某个特定匹配项下方的 n 行字符串?

perl - 循环 XML::Simple 结构

ajax - XML::Simple 在属性文本中保留实体

ruby - 未初始化的常量 XmlSimple,但我包含了正确的 gem

xml - 如何从 XML::Simple 访问嵌套数据结构中的数据?

ruby - 在 Ruby 中,当某些值为零时,有没有办法使用 XmlSimple?

perl - while(<@ array>)对perl的影响