Config :: Simple Perl模块循环哈希

时间:2016-04-17 16:51:18

标签: perl hash

我正在使用Config :: Simple作为我的App配置,我创建了Stats_feeder.cfg,其中有一个块[stats_interval]

[stats_interval]
1m = 60
15m = 900

我的perl脚本script.pl

my $cfg = new Config::Simple('stats_feeder.cfg') or die Config::Simple->error();

my $hash = $cfg->get_block('stats_interval');

当我运行print Dumper($hash);时,我得到了

# perl stats_feederv2.pl
$VAR1 = {
          '1m' => '300',
          '15m' => '900',
          '60m' => '3600',
          '30m' => '1800'
        };

我可以使用$val = $cfg->param('1m');

访问值

我正在尝试遍历此哈希并打印键和值,我尝试了以下内容:

foreach my $key ( keys %$hash )
{

  print "key $key value $hash{$key}\n";

}

我一直在

Global symbol "%hash" requires explicit package name at stats_feederv2.pl line 42.
Execution of stats_feederv2.pl aborted due to compilation errors.

2 个答案:

答案 0 :(得分:2)

您正在处理哈希引用,因此您需要使用$hash->{$key}

$hash{$key}这样的表达式试图访问哈希%hash的元素,而你得到的错误信息是因为哈希不存在。 $hash%hash完全不相关

答案 1 :(得分:1)

当您具有命名散列时,用于打印键值的

$hash{key}语法:%hash。在您的情况下,您在哈希引用下有一个匿名哈希。

要在这种情况下访问密钥的值,您应该使用以下语法:$hash_ref->{key}。变化:

print "key $key value $hash{$key}\n";

要:

print "key $key value $hash->{$key}\n";