2010-07-26 4 views
0

Я использую Expect в Perl, чтобы выполнить одну задачу. После отправки команды я ожидаю либо Success, либо ERROR в качестве вывода, в зависимости от того, что мне нужно для печати в файл, говоря, что он был успешным или неудачным.Как выполнить if-else в Perl Expect?

$exp->expect(30, 
    '-re', "Success", printf LOG "Successfully Deleted \n" => sub {exp_last;}, 
    '-re', "ERROR", printf LOG "Error in Deletion \n", 
); 

LOG - это дескриптор файла. Если я использую это, то даже если я получу Success в качестве результата команды send, выполняются регулярные выражения. В моем файле журнала я получаю

Error in Deletion 
Successfully Deleted 

Как это решить?

ответ

3

printf - оператор списка; первый Printf сожрет все ожидают остальные аргументы, как если бы вы сказали:

$exp->expect(30, '-re', "Success", 
    printf(LOG "Successfully Deleted \n" => 
     sub {exp_last;}, 
     '-re', 
     "ERROR", 
     printf(LOG "Error in Deletion \n") 
    ) 
); 

Так дело Успех первой ошибки печати в делеции, а затем успешно удалены. Вы должны, вероятно, вместо этого:

$exp->expect(30, 
    '-re', "Success", printf(LOG "Successfully Deleted \n" => sub {exp_last;}), 
    '-re', "ERROR", printf(LOG "Error in Deletion \n"), 
); 

за исключением того, что нет никаких оснований для использования Printf вместо печати там.

UPDATE: Насколько я могу понять Ожидать документы, что это не так, как вы делаете несколько шаблонов на все, и вы не должны делать:

my $which_pattern = $exp->expect(30, "Success", "ERROR"); 
if ($which_pattern) { 
    if ($which_pattern == 1) { 
     print LOG "Successfully Deleted \n"; 
    } 
    else { 
     print LOG "Error in Deletion \n"; 
    } 
} 

Нет необходимости в -rE, если вы на самом деле с использованием шаблонов вместо явных строк; не знаю, чего вы пытались достичь с помощью бит sub {exp_last;}.

+0

Hi Я только что изменил, что сказал. Но теперь происходит обратное. Сначала это печать успешно удалена, а затем она печатает ошибку в удалении в файле журнала. Я хочу, чтобы только один из них был в моем журнале. Если он соответствует успеху, то успешно удалено должно быть. Если он соответствует ERROR, тогда должна быть ошибка в удалении. :(:( – Raj

+0

@shayam: вам нужно будет показать свой новый код, возможно, включая все, что есть в ожидании вызова – ysth

+0

^^ Спасибо, журнал ysth. Он работает сейчас .. Большое спасибо .. – Raj