2011-07-18 34 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');