このマルチレベル ハッシュに送り込むデータがあります。
$newcomm_stat_hash{$stat_message_class}{$stat_process} = $stat_host;
キーと値の構造を持つ と$stat_message_class
を出力できます。$stat_process
foreach my $stat_message_class (keys %newcomm_stat_hash) {
my $stat_message_type = $stat_message_class;
foreach my $stat_process (keys %{$newcomm_stat_hash{$stat_message_class}} ) {
print $stat_host;
}
}
しかし、同じ形式で印刷すると$stat_host values
(以下のコードを参照)、次のエラー メッセージが表示されます。
multilevel_hash の 24 行目で「strict refs」が使用されている間は、文字列 (「dc109」) を HASH ref として使用できません。
キーまたは値関数についても同じメッセージが表示されます。
#!/usr/bin/perl
use warnings;
use strict;
my %newcomm_stat_hash;
my $control_server = "dc100";
my $control_stat_message = "OCCD2o";
$newcomm_stat_hash{'OCCD2o'} = { 'filesrvr' => 'dc100',
'dhcpsrv' => 'dc100',
'dnssrv' => 'dc109',
'mailpfd' => 'dc100',
};
$newcomm_stat_hash{'PIDmon2'} = { 'pingstat' => 'fg100',
'udpmon' => 'fg100',
'ftp' => 'dc100',
'casper' => 'dc440',
};
foreach my $stat_message_class ( keys %newcomm_stat_hash ) {
my $stat_message_type = $stat_message_class;
foreach my $stat_process ( keys %{$newcomm_stat_hash{$stat_message_class}} ) {
foreach my $stat_host (keys %{$newcomm_stat_hash{$stat_message_class}{$stat_process}} ) {
print $stat_host;
}
}
}
マルチレベルハッシュを逆参照した後、$stat_host
これを最後にプラグインしたいと思います:
use TERM::ANSIColor;
if ($stat_host ne $control_server) {
print "$stat_host, $stat_process , $stat_message_class";
}
elsif ( ($stat_host ne $control_server)
&& ($stat_message_class eq $control_stat_message)
) {
print color 'red';
print "$stat_host, $stat_process , $stat_message_class";
print color 'reset';
}