Двунаправленный ssh-канал на Perl

use FileHandle;
use IPC::Open2;
use POSIX ":sys_wait_h";
my $server = "$ssh $user\@$server 2>/dev/null";
$SIG{ALRM} = sub { dielog("SIGALRM ssh pipe broke"); };
$SIG{PIPE} = sub { dielog("SIGPIPE ssh pipe broke"); };
$SIG{CHLD} = sub { while (waitpid(-1,WNOHANG) > 0) { dielog("child ssh exited $?") if $?>0; }; };
$pid = open2(*RECV,*SEND,$server) || dielog("can't exec $server");
SEND->autoflush(1);
print SEND "blablabla" || dielog("can't send data"); #передаем
close(SEND) || dielog("ssh exited $?");
$buf = <RECV>; #принимаем
close(RECV) || dielog("ssh exited $?");
waitpid($pid,0);

Здесь нет задачи особенно синхронизировать прием/передачу - все происходит последовательно.
Сильно подозреваю, что можно обойтись и без обработчиков SIGALRM и SIGPIPE, но пусть будут на всякий случай.
Функция dielog аварийно завершает работу скрипта, но перед этим пишет сообщение в системный лог.