在expect模块中,如果我期望的表达式不匹配,如何停止程序的执行并退出循环。因为,即使模式不匹配,它继续执行脚本。
前:
#!/usr/bin/perl -w
use Expect;
my $handle = new Expect;
$handle = Expect->spawn("telnet 192.168.1.1");
$handle->expect(10,'re','sdhj: '); #The expected string [sdhj: ]is not matching , but even then it goes on executing the below lines
$handle->send("system\r");
$handle->expect(10,'re','Password: ');
$handle->send("12345\r");
我想要的是,如果预期的表达式不匹配,那么应该使用错误消息停止执行程序。
答案 0 :(得分:2)
对于这样的简单情况,只需添加or die
您想要出现错误消息的地方(将我的错误消息更改为您想要的任何内容):
$handle->expect(10,'re','sdhj: ') or die "Didn't match [sdhj: ] $!"
如果事情变得复杂一点,您可能需要查看Try::Tiny模块。
答案 1 :(得分:0)
尝试:
my $timeout = 10;
my $pattern = 'sdhj:';
$handle->expect($timeout,
'timeout', sub {die "did not match $pattern in $timeout seconds"},
'-re',$pattern
);
文档:https://metacpan.org/module/RGIERSIG/Expect-1.21/Expect.pod#object-expect-timeout-match_patterns