#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw( mkfifo );
use IO::Handle;
my $svitok_truby = 'tmp.pp';
mkfifo( $svitok_truby, 0700 ) || die "Pipe fail; $svitok_truby : $!";
local $SIG{CHLD} = "IGNORE";
my @args = ('perl','-MIO::Handle','-E',<<'EOC',$svitok_truby);
$| = 1;
open my $fh, "<", $ARGV[0];
while(read $fh, my($char), 1) {
print $char;
}
EOC
my $pid = fork();
die "Fork failed\n" unless defined $pid;
if ($pid == 0) {
exec @args;
}
open (my $FIFO, '>', $svitok_truby) || die "can't open $svitok_truby: $!";
$FIFO->autoflush(1);
while(read STDIN, my($char), 1) {
print $FIFO $char;
}
close($FIFO);
END {
unlink $svitok_truby;
}
####
my @args = ('/usr/bin/mplayer', '-slave', '-input', "file=$svitok_truby", $svitok_na_vosproizvedenie_kom[$i]);
####
perl -E'$|=1;print,sleep 1 for 0..9' | perl script.pl