2013-10-01 73 views
1

我正在寻找一些解析YAML文档的帮助。具体而言,我不确定主机打印/访问“卷”元素。任何帮助将不胜感激。提前致谢!用perl解析YAML文件。如何访问和解析不同的yaml对象。

Perl代码:

#!/usr/bin/perl 

use YAML::Tiny; 


# Open the config 
$yaml = YAML::Tiny->read('file.yml'); 

# Reading properties 
my $root = $yaml->[0]->{rootproperty}; 
my $one = $yaml->[0]->{physical_interfaces}->{e0a}; 
my $Foo = $yaml->[0]->{physical_interfaces}->{e0b}; 
print "$root\n"; 
print "$one\n"; 
print "$volume1\n"; 

我YAML文件看起来像这样:file.yaml

--- 
    rootproperty: netapp1 
    is_netapp: Yes 
    netapp_mode: 7mode 
    is_metro_cluster: Yes 
    is_vseries: Yes 
    is_flexcache_origin: No 
    snapmirror: 
     enabled: Yes 
     destination: Yes 
     lag_threshold: 2300 
    physical_interfaces: 
     e0a: netapp1-e0 
     e0b: netapp1-e1 
     mgt: netapp1-mgt 
    volumes: 
     - volume: vol1 
     reserve: 50 
     sched: 6 42 0 
     - volume: vol2 
     reserve: 20 
     sched: 0 3 0 

回答

4

那么你似乎有正确的想法了。以相同的方式如可以用

my $root = $yaml->[0]{rootproperty} 

访问rootproperty字段可以用

my $volumes = $yaml->[0]{volumes} 

$volumes访问volumes阵列是现在体积散列数组的引用。你可以打印这些出来,例如,使用

for my $vol (@$volumes) { 
    print $vol->{volume}, "\n"; 
    print $vol->{reserve}, "\n"; 
    print $vol->{sched}, "\n"; 
    print "\n"; 
} 

随着你显示数据,这将产生输出

vol1 
50 
6 42 0 

vol2 
20 
0 3 0 
+0

感谢您的帮助鲍罗廷! –