Я написал функцию, которая использует регулярное выражение и выводит нужную строку из вывода команды. Скрипт работает так, как ожидалось. Но это не поддерживает динамический вывод. В настоящее время я использую regex для «icmp» и «ok» и печатаю значения. Теперь type
, destination
и return code
могут измениться. Существует высокая вероятность того, что команда не возвращает результат вообще. Как мне обрабатывать такие сценарии?Регулярное выражение для печати строки из команды outpout
sub check_summary{
my ($self) = @_;
my $type = 0;
my $return_type = 0;
my $ipsla = $self->{'ssh_obj'}->exec('show ip sla');
foreach my $line($ipsla) {
if ($line =~ m/(icmp)/) {
$type = $1;
}
if ($line =~ m/(OK)/) {
$return_type = $1;
}
}
INFO ($type,$return_type);
}
command Ouptut :
PSLAs Latest Operation Summary
Codes: * active,^inactive, ~ pending
ID Type Destination Stats Return Last
(ms) Code Run
-----------------------------------------------------------------------
*1 icmp 192.168.25.14 RTT=1 OK 1 second ago
Пока вы технически «используете» регулярные выражения, вы на самом деле не «используете» свою силу, поскольку используете фиксированные подстроки, как шаблоны. Начните здесь http://perldoc.perl.org/perlrequick.html для быстрого обучения. – mp3
Остальная часть документации [perlrequick] (http://perldoc.perl.org/perlrequick.html) [perlre] (http://perldoc.perl.org/perlre.html) [perlreref] (http: // perldoc.perl.org/perlreref.html) [perlretut] (http://perldoc.perl.org/perlretut.html) – mp3
(1) Что такое '$ ipsla'? Для 'foreach' нужен список для перебора - это arrayref? (2) Действительно ли строка интереса (и всегда) выводит последнюю строку вывода команды? – zdim