У меня есть данные, которые я закачиваю в этот многоуровневый хэш:
$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
по тому же формату (см. Код ниже), я получаю следующее сообщение об ошибке:
Невозможно использовать строку ("dc109")в качестве ссылки HASH, в то время как в строке multilevel_hash используются «строгие ссылки».
Я получаю то же сообщение для функции ключей или значений.
#!/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';
}