2012-06-12 34 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;

相關問題