Вы можете использовать opmnctl
options , чтобы упростить то, что должен обрабатывать Perl, возможно:
opmnctl status -noheaders -fsep '|' -fmt %cmp%sta
Я бы предложил использовать split и разделить на трубе |
символов, которые разделяют поля.
Вот короткий фрагмент, который может дать вам некоторые идеи. Если вы можете использовать некоторые опции opmnctl
, вы сможете упростить это.
use strict;
use warnings;
use Data::Dumper;
my %component_status;
LINE: for ( split( /\n/, $consoleStatus ) ) {
# Skip the furniture in the opmnctl output
next LINE if m/^component\W/ || m/^-/;
# field 0 is the component, field 3 the status.
my ( $component, $status ) = (split( / +\| */, $_ ))[0,3];
$component_status{$component} = $status;
}
warn Dumper( \%component_status );
Результат:
$VAR1 = {
'DSA' => 'Down',
'FTP_Servers' => 'Alive',
'SDFW' => 'Alive',
'serverpro' => 'Down',
'OID' => 'Alive',
'OXQA' => 'Alive',
'www-daemon' => 'Alive'
};