2011-07-18 36 views
1

我正在尝试使用AppConfig::File来处理配置文件。但是,我总是从对象中获得一个空值。以下是代码:AppConfig ::文件检索值

my $state = AppConfig::State->new({ 
    CREATE=>1, 
    }); 
my $cfgfile = AppConfig::File->new($state); 
$cfgfile->parse('sample.cfg'); 
my $temp = $cfgfile->{foo}; 
print "foo value: $temp\n"; 

这是在为sample.cfg:

## comment 
foo = me 

我做了什么错?提前致谢。

回答

2

解决方法是在变量的定义中包含ARGCOUNT设置。不知道如何从文件动态地执行它。

use warnings; 
use strict; 

use AppConfig ':argcount'; 
use AppConfig::File; 

my $state = AppConfig::State->new({ 
    CREATE=>1, 
    }); 
$state->define('foo', { ARGCOUNT => ARGCOUNT_ONE }); 
my $cfgfile = AppConfig::File->new($state); 
$cfgfile->parse('sample.cfg'); 
print "state value: '", $state->foo(), "'\n"; 
+0

我尝试过这种方式,但它显示错误:'无法找到对象的方法“富”通过一揽子“的AppConfig ::文件”在testAppConfig.pl线55.'任何其他的想法? – Ken

+0

在[AppConfig :: State](http://search.cpan.org/~abw/AppConfig-1.66/lib/AppConfig/State.pm)中,有更多方法来检索变量,例如' - > get(“富“)'。也许你需要做'$ state-> foo()'?这些变量可能会保存在状态中,但可以在File中进行分析。 – TLP

+0

$ state-> foo()返回一个'1' ....而不是我期待的'me'。任何其他的想法? – Ken

0

晚了一点晚了,但我发现这个作品,如果你不想预定义的一切。

use warnings; 
use strict; 

use AppConfig ':argcount'; 

my $config = AppConfig->new({ 
    CREATE => 1, 
    GLOBAL => { ARGCOUNT => ARGCOUNT_ONE }, 
    }); 
$config->file('sample.cfg'); 

print $config->foo(); 
# or 
print $config->get('foo');