On Wed, Jan 25, 2012 at 12:18 AM, Mons Anderson <[email protected]> wrote:
> Если уж и приводить в пример альтернативный синтаксис, то не CPS, а
> IO::Lambda
Ну это тот же подход. Только можно не изобретать ничего, а просто
использовать функции и колбэки. В общем все равно идеального решения нет.
Как-то так можно для AE, читабельно и не очень сложно
(как бонус у такого кода достаточно хорошая производительность) :
tcp_server undef, 55555, sub {
my ($fh, $host, $port) = @_;
my ($start, $read_timeout, $read, $end);
my ($t, $w, $buf);
$start = sub {
$t = AE::timer 15, 0, $read_timeout;
$w = AE::io $fh, 0, $read;
};
$read_timeout = sub {
...
&$end();
};
$read = sub {
my $len = sysread $fh, $buf, ...;
if ($len) {
$t = AE::timer 15, 1, $write_timeout;
$w = AE::io $fh, 0, $write;
&$write();
...
} elsif (...) {
...
&$end();
}
}
...
$end = sub {
undef $w;
undef $t;
...
};
&$start();
};
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org