Я читаю данные из файла YAML (используйте YAML qw / LoadFile /). Мне нужно иметь возможность читать значения и вставлять их в другие файлы.
Файл 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 :: Dumper, я получаю следующее ($ Data :: Dumper :: Terse включен):
{
'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, заменив значение oldip на значение newip. Однако я не понимаю, как его использовать. Если я просто напечатаю значение загруженного файла 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
Может ли кто-нибудь объяснить мне, что мне нужно сделать, чтобы иметь возможность читать значения из этого ввода, чтобы я мог внести необходимые изменения?