我正在从YAML文件读取数据(使用YAML qw/LoadFile /)。我需要能够读取这些值并将它们插入到其他文件中。阅读后如何使用YAML文件中的数据?
的YAML文件的格式如下:
---
host:
- name: first_host
interface:
- name: eth0
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
- name: eth1
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
- name: eth2
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
如果我跑这通过Data ::自卸车,我得到以下($数据::自卸车::简洁启用):
{
'host' => [
{
'interface' => [
{
'oldgw' => '1.2.3.1',
'newgw' => '2.3.4.1',
'name' => 'eth0',
'newip' => '2.3.4.5',
'oldip' => '1.2.3.4'
},
{
'oldgw' => '1.2.3.1',
'newgw' => '2.3.4.1',
'name' => 'eth1',
'newip' => '2.3.4.5',
'oldip' => '1.2.3.4'
},
{
'oldgw' => '1.2.3.1',
'newgw' => '2.3.4.1',
'name' => 'eth2',
'newip' => '2.3.4.5',
'oldip' => '1.2.3.4'
}
],
'name' => 'first_host'
},
]
}
我需要进行更改,例如在/ etc/sysconfig/network-scripts/ifcfg-eth0中,使用newip值交换oldip值。但是,我不知道如何使用它。如果我只是打印加载的YAML文件的值,它看起来只不过是一个散列引用。但是,如果我尝试解散散列,我会得到以下内容:
Reference found where even-sized list expected
接下来是散列引用。
这是我开始的脚本:
#!/usr/bin/perl
use strict;
use warnings;
use YAML qw(LoadFile);
use Data::Dumper;
$Data::Dumper::Terse = 1;
my %data = LoadFile("/home/user/bin/perl/dummy_data.yml");
print \%data
有人能向我解释什么,我需要做的,能够从该输入读取的值,所以我可以做我所需要的变化做?
你可能想看看[perlreftut](http://perldoc.perl.org/perlreftut.html“perldoc perlreftut”)和[perlref](http://perldoc.perl.org/perlref.html“ perldoc perlref“)。 –