使用Config :: IniFiles读取文件时未读取整个字符串

时间:2013-11-27 05:22:15

标签: perl

我无法打印整行,因为我尝试使用Config:Ini操作解析ini文件,它的最后一部分,我相信数组将拥有整行而不仅仅是键,我肯定会丢失这里的东西

输入

[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 ($@){
        print "Error";
        exit 1;
}
my @params_provider = $cfg->Parameters("ProviderCredentials");
foreach (@params_provider){
print $_."\n";
}

输出

Class
Routine

预期产出

Class=A
Routine=B

3 个答案:

答案 0 :(得分:1)

看起来参数只返回键。

然后,您必须使用val来获取值。

答案 1 :(得分: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();

最后一个命令实际上写出了绑定哈希中保存的整个配置。

希望这有帮助!

答案 2 :(得分: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 ($@){
        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";
}