用perl expect 遇到一个不能匹配的问题

用perl expect 遇到一个不能匹配的问题

用perl expect 遇到一个不能匹配的问题
dslam设备操作命令为:
ma5600_15qi# quit
Check whether system data has changed. Please save data before logout. Are you sure to log out? (y/n)[n]:

ma5600_15qi#quit
然后程序如下:
。。。。。
$exp->send_slow(1,"quit\n ");
$exp->expect(5,
[qr/Check/=>sub {
$exp->send_slow(1," y\n");
}]
);
$exp->send_slow(1,"quit\n ");

程序执行时,在第一个quit命令后,没有输出“y”,等了一会后,就回到#下,然后接着又输出了第二个“quit”命令,然后就又出现了上面的“Check。。。”那句话,然后就等到timeout后,程序中止。而正常情况下,如果输出“y”后,这个dslam的telnet进程就退出了,我试了好几次,也改过不同的匹配模式,但是都没有解决,不知道“y”是没有输出还是丢了,奇怪。请高手指教,谢谢!
$exp->send_slow(1,"qu.
$exp->send_slow(1,"quit\n ");
$exp->expect(5,
[qr/Check/=>sub {
$exp->send_slow(1," y\n");
}]
);
这里send_slow之后没有expect, 后面就接着send_slow了.
一定要保证每一次send之后都有expect, 否则可能会出现莫名的问题.
接着上面的, 你可以写成 接着上面的, 你可以写成
$exp->expect(5,
[qr/Check/=>sub {
$exp->send_slow(1," y\n");
}],
'-re', '^.*# ',
);