使用perl解析YAML文件。如何访问和解析不同的yaml对象。

时间:2013-10-01 13:52:25

标签: 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

1 个答案:

答案 0 :(得分:4)

嗯,你似乎已经有了正确的想法。与您使用

访问rootproperty字段的方式相同
my $root = $yaml->[0]{rootproperty}

您可以使用

访问volumes数组
my $volumes = $yaml->[0]{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