2013-11-27 79 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"; 
}