2010-07-16 6 views
4

Я использую Expect в perl для подключения к удаленной машине и выполнения определенных функций. пример кода похож наОценка ожидаемого в perl

$outfile="ls -lrt"; 
$outfile1="output"; 

$exp->expect(30,-re,".*bash-.*" => sub{$exp->send("$outfile2 >$outfile \r")}); 
$exp->expect(60,-re,".*bash-.*" => sub{$exp->send("$shayam > $Ram \r")}); 

Даже если первое выражение не работает, оно будет ждать 60 секунд и выполнит второй оператор. Я просто хочу проверить, что если только первый оператор проходит, он должен продолжаться.

ответ

4

Я предполагаю, что вы используете the Expect.pm module documented here. Как было сказано там:

При вызове в контексте массива ожидать() вернется ($ matched_pattern_position, $ ошибок, $ successfully_matching_string, $ before_match и $ after_match).

Таким образом, вы, вероятно, захотите вызвать его в контексте массива, чтобы вы могли получить ошибку, как при возникновении регулярного выражения, так и при сбое отправки.

my ($matched_pattern_position, $error, 
    $successfully_matching_string, 
    $before_match, $after_match) = 
    $exp->expect(30 
    , -re,".*bash-.*" => 
    sub{$exp->send("$outfile2 >$outfile \r")} 
); 

$exp->expect(60 
    ,-re,".*bash-.*" => 
    sub{$exp->send("$shayam > $Ram \r")} 
) if !defined $error;