我正在编写我的第一个 Perl 应用程序——一个与 Arduino 微控制器对话的 AOL Instant Messenger 机器人,后者反过来控制一个伺服系统,该伺服系统将按下我们系统管理员服务器上的电源按钮,该服务器每 28 小时左右随机冻结一次。
我已经完成了所有困难的事情,我只是想添加最后一点代码来打破主循环并在用户键入“退出”时退出 AIM。
问题是,如果我尝试在主程序循环中从 STDIN 读取数据,它会阻止进程直到输入输入,从而使机器人处于非活动状态。我在阅读之前尝试过测试 EOF,但没有骰子...... EOF 总是返回 false。
下面是我正在使用的一些示例代码:
while(1) {
$oscar->do_one_loop();
# Poll to see if any arduino data is coming in over serial port
my $char = $port->lookfor();
# If we get data from arduino, then print it
if ($char) {
print "" . $char ;
}
# reading STDIN blocks until input is received... AAARG!
my $a = <STDIN>;
print $a;
if($a eq "exit" || $a eq "quit" || $a eq 'c' || $a eq 'q') {last;}
}
print "Signing off... ";
$oscar->signoff();
print "Done\n";
print "Closing serial port... ";
$port->close() || warn "close failed";
print "Done\n";