当我用花括号包围它时,perl哈希会发生什么?

时间:2012-06-12 19:11:15

标签: perl perl-data-structures

我正在努力了解这个perl模块是如何工作的,它被称为XML :: Smart。除了与模块没有多大关系的一件事之外,大部分都很容易理解。

我想要做的是将我的脚本中的哈希值复制到XML :: Smart模块中以进行处理。经过一些“禁止”后,我设法让它做我想做的事。问题是我不知道我到底做了什么。如果有人能够提供一个线索,说明为什么这种方法在英语中意味着什么就会很棒。

当我在翻阅我自己的模块时,我看到了这样的事情,这意味着它与制作课程有关,不确定它是否被称为或者它有类似的东西。

这是我的代码;

#!/usr/bin/perl
use strict;
use warnings;
use XML::Smart;

my $xml_obj = XML::Smart->new();

my %config_file = (
    "server01" => {
        "connection" => {
            "address" => "10.0.0.4",
            "port" => "22",
        }, "authentication" => {
            "username" => "admin",
            "password" => "password",
        },
    },
);

$xml_obj->{config} = {%config_file};

2 个答案:

答案 0 :(得分:3)

它使用旧哈希的(浅)副本创建对新哈希的引用。

{}是一个hashref。

{ "foo", "bar", "x", "y" }使用键和值列表定义hashref。

如果你在{}中放入一个哈希,它就在列表上下文中,那么它就变成了一个键和值列表。

答案 1 :(得分:-1)

如果您尝试将%config_file分配给$ xml_obj-> {config} 你会想要做一些像哈希切片的事情。

@ {$ xml_obj-> {config}} {keys%config_file} = values%config_file;