2012-06-12 31 views
1

我正在努力了解这个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}; 

回答

3

它创建一个带有旧散列(浅)副本的新散列的引用。

{}是一个hashref。

{ "foo", "bar", "x", "y" }定义了一个带有键和值列表的hashref。

如果你在{}里放置了一个散列,它就在列表上下文中,所以它变成了一个键和值的列表。

+0

这是相同的“\%配置”? – ianc1215

+0

@Solignis - 不,这将是对原始散列的引用,而不是其副本。 – Quentin

+0

我想要做的不是复制(单词的选择不当),我想“将原始哈希反映到$ xml_obj - > {config}。有意义吗? – ianc1215

-1

如果您试图将%config_file分配给$ xml_obj - > {config} 您需要执行类似散列片段的操作。

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

相关问题