in reply to Infinite LOOP and reading from STDIN

#!/usr/bin/perl # https://perlmonks.org/?node_id=11104382 use strict; use warnings; use IO::Select; use Time::HiRes qw(time); use List::Util qw( max ); sub Engine::doHeatbeat { print "in Engine::doHeatbeat\n"; } sub Engine::Parser::Command { print "in Engine::Parser::Command( @_ )\n"; } my $interval = 10; # seconds my $sel = IO::Select->new(*STDIN); my $trigger = time + $interval; # unix time to call heartbeat while(1) { my $wait = max 0, $trigger - time; for my $fh ( $sel->can_read( $wait ) ) { chomp( my $input = <$fh> ); Engine::Parser::Command($input); } if( $trigger <= time ) { Engine::doHeatbeat; $trigger = time + $interval; } }

Consider this an example of why you should use an Async package as recommended by Hippo here Re: Infinite LOOP and reading from STDIN