2011-03-10 32 views
3

生病了幾個星期後,我試圖回到我的腳本項目中,似乎遇到了一個新手速度顛簸。爲什麼這個哈希顯示不正確?

我想組裝一個腳本來汲取一個文件,然後使用正則表達式從文件中處理參數,並從發現的參數構建一個哈希。

但我遇到的問題是哈希沒有按照我想要的方式構建,或者至少我認爲它不是。

這是我正在處理的小腳本。

#!/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一個子項的根密鑰,因爲我也有用戶,密碼和端口號子項。

我一直在咀嚼大約半小時(部分分心)試圖找出它爲什麼不工作,任何幫助將不勝感激。

回答

7

你想要這樣的輸出嗎?

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

如果是這樣,你的%配置是好的。你的問題是你傳遞一個散列(它被解釋爲 一個數組 的一個列表),而不是一個hashref到Dumper。改爲嘗試Dumper(\%config)

+1

正是我想要的 – ianc1215 2011-03-10 05:01:10

+1

你一定是在開玩笑....我認爲這將是簡單的,但缺少「\」是荒謬的。無論如何感謝幫助現在工作正常。 – ianc1215 2011-03-10 05:02:33

+2

's/array/list /' – 2011-03-10 05:05:57