Я пишу свое первое приложение на Perl - бот AOL Instant Messenger, который общается с микроконтроллером Arduino, который, в свою очередь, управляет сервоприводом, который нажимает кнопку питания на сервере нашего системного администратора, который случайным образом зависает каждые 28 часов или около того ,
Я выполнил все сложные задачи, я просто пытаюсь добавить последний бит кода, чтобы разорвать основной цикл и выйти из AIM, когда пользователь вводит 'quit'.
Проблема в том, что, если я пытаюсь читать из 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";