2016-04-17 8 views
0

Ich verwende Config :: Simple für meine App Config habe ich Stats_feeder.cfg erstellt, die einen Block hat [stats_interval]Config :: Simple Perl-Modul Schleife durch Hash

[stats_interval] 
1m = 60 
15m = 900 

Und mein Perl-Skript script.pl

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

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

Wenn ich print Dumper($hash); laufen bekomme ich

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

Ich kann Werte zugreifen $val = $cfg->param('1m');

mit Ich bin eine Schleife durch diesen Hash und Druck Schlüssel und Werte versuchen, ich habe folgendes versucht:

foreach my $key (keys %$hash) 
{ 

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

} 

halte ich

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

Antwort

1

$hash{key} Syntax, die Sie den Wert des Schlüsselwerke für den Druck in keinem Zusammenhang verwenden, wenn Sie einen benannten Hash haben: %hash. In Ihrem Fall haben Sie einen anonymen Hash unter einer Hash-Referenz.

Um in solch einem Fall auf den Wert des Schlüssels zuzugreifen, sollten Sie folgende Syntax verwenden: $hash_ref->{key}. Wechsel:

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

An:

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

Sie bekommen sind mit einem Hash Referenz so zu tun, müssen Sie $hash->{$key}

Ein Ausdruck li ke $hash{$key} versucht, auf ein Element von Hash %hash zuzugreifen, und die Fehlermeldung, die Sie bekommen, ist, weil dieser Hash nicht existiert. $hash und %hash sind

+0

Ich schätze Ihre Erklärung – Deano