суббота, 16 апреля 2011 г.

Неблокирующие чтение stdin

Определенно есть что улучшить, но уже что то работает.

use Time::HiRes qw(usleep);

STDIN->blocking(0);
my $timeout = 50;
my $timer = 0;
my ($i,$o,$s);

while (1) {
local $_ = <stdin>;
if (defined) {
$_=~/^(\w+):(.+)\n$/;
$i=$2 if ($1 eq "ACCT_INPUT_OCTETS");
$o=$2 if ($1 eq "ACCT_OUTPUT_OCTETS");
$s=$2 if ($1 eq "ACCT_SESSION_ID");
last if ($_ eq "\n");
$timer=0;
}
usleep 50000;
last if $timer++ > $timeout;
}