简单的Perl模块通过散列循环

简单的Perl模块通过散列循环,perl,hash,Perl,Hash,我正在使用Config::Simple作为我的应用程序配置,我已经创建了Stats\u feeder.cfg,它有一个block[Stats\u 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_bl

我正在使用Config::Simple作为我的应用程序配置,我已经创建了
Stats\u feeder.cfg
,它有一个block
[Stats\u 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');
当我运行
打印转储程序($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.

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


类似于
$hash{$key}
的表达式正在尝试访问hash
%hash
的元素,您收到的错误消息是因为该hash不存在
$hash
%hash
是完全不相关的

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


类似于
$hash{$key}
的表达式正在尝试访问hash
%hash
的元素,您收到的错误消息是因为该hash不存在
$hash
%hash
是完全不相关的

$hash{key}
当您有一个命名hash时,用于打印密钥值的语法是:
%hash
。在您的例子中,在散列引用下有一个匿名散列

要在这种情况下访问键的值,应该使用以下语法:
$hash_ref->{key}
。更改:

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


$hash{key}
当您有一个命名哈希时,用于打印密钥值的语法有效:
%hash
。在您的例子中,在散列引用下有一个匿名散列

要在这种情况下访问键的值,应该使用以下语法:
$hash_ref->{key}
。更改:

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


我感谢你的解释