我正在從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「)。 –