2012-03-29 11 views
5

私はINIファイルの値を読み込んで取得する必要があるPerlスクリプトを作っています。Perl:INIファイルを反復する

INIファイル形式:

[name] 
Property=value 

例:あなたが見ることができるように

[switch_6500] 
cpu=1.5.1.12.4 
free_memory=1.45.32.16 

[oracle_db_11g] 
param1=value1 
param2=value2 
param3=value3 
param4=value4 
... 

、任意の数のパラメータを含むセクションの任意の量が存在し得ます。セクション名/パラメーターの名前は常に異なります。

私がする必要があるのは、私のPerlスクリプトがすべてのセクションを反復し、そのセクションのすべてのパラメータ名/値を取得することです。私は、INIファイルでやってに慣れていることは、単純に、このようなパラメータの名前と一緒にセクション名を指定します

#!/usr/bin/perl -w 

    use strict; 
    use warnings; 
    use Config::Tiny; 

    # Read the configuration file 
    my $Config = Config::Tiny->new(); 
    $Config = Config::Tiny->read('configfile.ini'); 
    my $Metric1_var = $Config->{switch_6500}->{cpu}; 
    my $Metric2_var = $Config->{switch_6500}->{free_memory}; 

しかし、今私も、セクション名/パラメータの不確定量を持っていること彼らの名前を知らないので、私はすべての値を抽出する方法を見つけることができないようです。私はConfig :: IniFilesモジュールを見ていましたが、面白いことがいくつかありましたが、セクション/パラメータ名を知らなくてもパラメータ値を得る方法が見つけられないようです。

誰でもこのINIファイルを反復することができれば、非常に感謝しています。

ありがとうございます。

答えて

6

あなたはConfig::Tinyで何でもできます。次のように単純に、ハッシュのすべてのキーを反復処理するkeys機能を使用します。

use strict; 
use Config::Tiny; 

my $config = Config::Tiny->read('configfile.ini'); 

foreach my $section (keys %{$config}) { 
    print "[$section]\n"; 
    foreach my $parameter (keys %{$config->{$section}}) { 
     print "\t$parameter = $config->{$section}->{$parameter}\n"; 
    } 
} 

注:をハッシュは、「ハッシュ化」であり、配列のよう命じていないので、キーの順序は、5月に返されます無意味に見える。 INIファイルでは順序は関係ありません(どのパラメータがどのセクションにあるかという点だけが重要です)、これは問題ではありません。

+0

ありがとう、これは私が探していたものです。 – user1300922

5

私は個人的にはConfig::Simpleを好む。引数なしでparam()メソッドを呼び出すと、ファイルからすべてのパラメータを返すことができます。また、Config::Tinyよりも優れた機能がいくつかあります。

+0

+1です。 – Zaid

2

あなたはiniファイルの解析に満足していると思います。 セクション&のすべてのセクションをループしたい場合は、

このようにハッシュ・オブ・ハッシュをループできます。

foreach my $Section (keys %$Config) { 
print "[$Section]"; 
foreach my $Key (keys %{$Config->{$Section}}) { 
    print "$Key = $Config->{$Section}->{$Key}"; 
} 
} 
+0

これは完全に機能します。ありがとうございました:) – user1300922