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

ian*_*215 3 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);
Run Code Online (Sandbox Code Playgroud)

对于那些希望在这里执行脚本的人是我正在构建的配置文件

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
Run Code Online (Sandbox Code Playgroud)

只需将其保存到调用的文件中,settings.cfg除非您想要更改脚本中的参数.

无论如何这是我得到的输出Data::Dumper.

$VAR1 = 'server01';
$VAR2 = {
          'host' => 'esxi01'
        };
Run Code Online (Sandbox Code Playgroud)

我要做的是创建server01哈希的根密钥和host子密钥,因为我还将有用户,密码和端口号的子密钥.

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

Ano*_*mie 7

你想要这样的输出吗?

$VAR1 = {
      'server01' => {
                      'host' => 'esxi01'
                    }
    };
Run Code Online (Sandbox Code Playgroud)

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

  • `S /阵列/列表/` (2认同)