我正在尝试组装一个脚本来粘贴文件,然后使用正则表达式处理文件中的参数,并根据找到的参数构建一个哈希值。
但是我遇到的问题是哈希没有按照我想要的方式构建,或者至少我认为它不是。
这是我正在制作的小脚本。
#!/usr/bin/perl
use strict;
use warnings;
use File::Slurp;
use Data::Dumper;
my %config;
my $text = read_file("./config/settings.cfg");
if ($text =~ /^esxi\.host\s+=\s+(?<host>.+)/xm) {
$config{host} = "$+{host}";
}
print Dumper (%config);
对于那些希望在这里执行脚本的人是我正在构建的配置文件
Connection Options:
######################################################
esxi.host = server01
esxi.port = 22
esxi.username = root
esxi.password = password
######################################################
Backup Options:
#########################
Compression Options:
0 = none
1 = tar
2 = gzip
3 = tar+gzip
#########################
backup.compression = 0
只需将其保存到名为settings.cfg
的文件中,除非您想要更改脚本中的参数。
无论如何这是我从Data::Dumper
获得的输出。
$VAR1 = 'server01';
$VAR2 = {
'host' => 'esxi01'
};
我要做的是将server01
作为哈希的根密钥,host
作为子密钥,因为我还会有用户,密码和端口号的子密钥。
我一直在咀嚼这个半小时(部分分心)试图弄清楚它为什么不起作用,任何帮助都会受到最高的赞赏。
答案 0 :(得分:7)
你想要这样的输出吗?
$VAR1 = {
'server01' => {
'host' => 'esxi01'
}
};
如果是这样,你的%config就可以了。你的问题是你传递一个哈希(它被解释为一个数组一个列表)而不是一个hashref到Dumper
。请改为Dumper(\%config)
。