2015-05-14 60 views
0

INI文件可以在它裏面的變量,比如:Perl如何解析包含變量的INI文件?

[section1] 
root=/path/to/dir 
home=%(root)s/my_home_dir/ 

現在,Perl庫Config::IniFiles似乎並不解析它,它並將其作爲原始字符串

my $result = tie %info, 'Config::IniFiles', (-file => $ini_file); 

在Python有一個類似的包叫ConfigParser.RawConfigParser - 不會轉換變量,但那麼你可以使用ConfigParser.ConfigParser,它會。

Perl中是否有類似的東西,或者是我正在尋找的解決方案?

+0

'配置::一般Interpolated',但它使用Perl樣式的變量語法。 – toolic

+0

Config :: General ::內插只解析類型變量:$ variable或$ {variable}而INI文件具有「%(root)s」類型的Python類型 –

回答

1

如果你不能找到你所使用的配置文件格式現有的解析器,你可以簡單地使用

sub get_conf { 
    my ($hash, $key) = @_; 
    my $val = $hash{key}; 
    return undef if !defined($val); 

    $val =~ s{%\(([^()]*)\)}{ get($hash, $1) // "" }eg; 
    return $val; 
} 

my $home = get_conf(\%conf, 'home'); 
+0

工程,即使我正在尋找更多的內置在Perl中,但謝謝! –

+0

Config ::您使用的IniFiles不是內置在Perl中 –