2013-11-27 100 views
0

我無法打印整行,因爲我嘗試使用Config來解析ini文件:Ini操作,它的最後一部分我相信該數組將會有整條生產線並不僅是關鍵,我肯定在這裏的東西使用Config :: IniFiles讀取文件時讀取整個字符串:

輸入

[DomainCredentials] 

broker=SERVER 
domain=CUSTOMER1 

[ProviderCredentials] 

Class=A 
Routine=B 

代碼

#!/sbin/perl -w 

use lib "/usr/lib/perl5/site_perl"; 
use lib "/usr/lib/perl5/vendor_perl"; 

use strict; 
use warnings; 
use Config::IniFiles; 
my $sPPFile="/tmp/config.txt"; 
my $sysSec="DomainCredentials"; 
my $cfg = Config::IniFiles->new(-file=> $sPPFile) || die "Could open file $sPPFile\n"; 
if ([email protected]){ 
     print "Error"; 
     exit 1; 
} 
my @params_provider = $cfg->Parameters("ProviderCredentials"); 
foreach (@params_provider){ 
print $_."\n"; 
} 

輸出

Class 
Routine 

期望輸出

Class=A 
Routine=B 

回答

1

您可以使用tied hash option of Config::IniFiles得到的config.txt參數/值對:在你的數據集

use strict; 
use warnings; 
use Config::IniFiles; 

my %ini; 
my $sPPFile = "/tmp/config.txt"; 
tie %ini, 'Config::IniFiles', (-file => $sPPFile); 

print "$_=$ini{ProviderCredentials}{$_}\n" 
    for keys %{ $ini{ProviderCredentials} }; 

輸出:

Class=A 
Routine=B 

你可以改變一個參數的值,然後通過這樣更新配置文件:

$ini{ProviderCredentials}{Class} = 'C'; 
tied(%ini)->RewriteConfig(); 

最後一條命令實際上寫出了綁定哈希中保存的整個配置。

希望這會有所幫助!

+0

我做了這個'my%ini; tie%ini,'Config :: IniFiles',(--file => $ sPPFile); foreach(%{$ ini {ProviderCredentials}}){ #print「Key:」。$ _。「\ t Value:」。$ cfg-> val(「ProviderCredentials」,$ _)。「\ n」; print $ _。「\ n」; } ''我得到的輸出是'Class \ n A \ n例程\ b B'全部用4個不同的行 – learner

+0

@learner - 你已經將一個散列傳遞給'foreach':'foreach(%{$ ini {ProviderCredentials} }){'並且您正在打印返回的散列元素列表。在循環的邊上嘗試使用foreach(鍵%{$ ini {ProviderCredentials}}){'和'print'$ _ = $ ini {ProviderCredentials} {$ _} \ n「'。 – Kenosis

1

它看起來像的參數僅返回鍵。

然後您必須使用val來獲取值。

+0

不知道這個,謝謝粘貼下面的代碼 – learner

0
#!/sbin/perl -w 

use lib "/usr/lib/perl5/site_perl"; 
use lib "/usr/lib/perl5/vendor_perl"; 

use strict; 
use warnings; 
use Config::IniFiles; 
my $sPPFile="/tmp/config.txt"; 
my $sysSec="DomainCredentials"; 
my $cfg = Config::IniFiles->new(-file=> $sPPFile) || die "Could open file $sPPFile\n"; 
if ([email protected]){ 
     print "Error"; 
     exit 1; 
} 
my @param_arr = ('broker','domain'); 
my %param_hash; 

foreach my $p (@param_arr){ 
     if (defined $cfg->val("$sysSec",$p)){ 
       $param_hash{$p} = $cfg->val("$sysSec",$p); 
     } 
     else{ 
       die "Could not get parameter $p\n"; 
     } 
} 
#print $param_hash{broker}; 
#print $param_hash{domain}; 

my @params_provider = $cfg->Parameters("ProviderCredentials"); 
if (defined $cfg->Parameters("ProviderCredentials")){ 
     my @params_provider = $cfg->Parameters("ProviderCredentials"); 
}else{ 
     die "Could not get parameter ProviderCredentials\n"; 
} 

foreach (@params_provider){ 
     print "Key : ".$_."\t Value : ".$cfg->val("ProviderCredentials",$_)."\n"; 
}