0

在期望模块中,如果我期望的表达式不匹配,如何停止程序的执行并退出循环。因为即使模式不匹配,它也会继续执行脚本。

前任:

#!/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");    

我想要的是,如果预期的表达式不匹配,那么程序的执行应该停止并出现错误消息。

4

2 回答 2

2

对于像这样的简单情况,只需添加一个or die您希望出现错误消息的位置(将下面的错误消息更改为您想要的任何内容):

$handle->expect(10,'re','sdhj: ') or die "Didn't match [sdhj: ] $!"

如果事情变得有点复杂,您可能需要查看Try::Tiny模块。

于 2013-07-02T06:00:38.293 回答
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

于 2013-07-02T09:55:17.447 回答