为什么这个哈希没有正确显示?

时间:2011-03-10 04:54:23

标签: perl

生病了几个星期之后,我正试图回到我的脚本项目中,似乎遇到了新手速度障碍。

我正在尝试组装一个脚本来粘贴文件,然后使用正则表达式处理文件中的参数,并根据找到的参数构建一个哈希值。

但是我遇到的问题是哈希没有按照我想要的方式构建,或者至少我认为它不是。

这是我正在制作的小脚本。

#!/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作为子密钥,因为我还会有用户,密码和端口号的子密钥。

我一直在咀嚼这个半小时(部分分心)试图弄清楚它为什么不起作用,任何帮助都会受到最高的赞赏。

1 个答案:

答案 0 :(得分:7)

你想要这样的输出吗?

$VAR1 = {
      'server01' => {
                      'host' => 'esxi01'
                    }
    };

如果是这样,你的%config就可以了。你的问题是你传递一个哈希(它被解释为一个数组一个列表)而不是一个hashref到Dumper。请改为Dumper(\%config)