Perl中waitfor()的可靠替代方案

Perl中waitfor()的可靠替代方案,perl,Perl,下面是我的脚本片段,它将等待字符串“username:”并打印用户名以登录,在“username:”出现之前会打印大量启动消息,有时脚本找不到它并返回“找不到用户名:”,特别是当一些溢出的启动消息在之后打印时用户名:“提示行,那么有没有更可靠的方法来做到这一点?谢谢 my %words = ( username => 'user1', username_string => 'username: $', ); ( $prematch, $match ) = $obj->

下面是我的脚本片段,它将等待字符串“username:”并打印用户名以登录,在“username:”出现之前会打印大量启动消息,有时脚本找不到它并返回“找不到用户名:”,特别是当一些溢出的启动消息在之后打印时用户名:“提示行,那么有没有更可靠的方法来做到这一点?谢谢

my %words = (
   username => 'user1',
   username_string => 'username: $',
);
( $prematch, $match ) = $obj->{comm}->waitfor(Match => "/$words{username_string}/",Errmode => "return");
if ( !defined $match ) {
    print "Failed to find username:";
    return;
}
else {
  $obj->{comm}->print( $words{username} );
}

$obj是Net::Telnet的对象

事实上,我不知道哪种对象与您的$obj相关。假设它可能是Net::Telnet,这可能会帮助您:

此外:

( $prematch, $match ) = $obj->{comm}->waitfor(Match => "/$words{username_string}/",Errmode => "return");
也许将cmd输出捕获到数组变量中是更好的方法

my @lines = $telnet->cmd($comm);
for (my $line: @lines) {
    # your matching goes here..
}
或者试试这个:

$t = new Net::Telnet(Host =>"192.168.0.1", Timeout => 5,Port => "1701", Prompt => '/>\$ $/');
$t->print($comm);
$t->waitfor('/username: $/i');
print "result=", $s;

waitfor()显然是某个类的方法。如果我们知道它是哪个类,帮助您会更容易…看起来它来自是的,对不起,它来自NET::Telnet,我仍然理解我正在更新的脚本。