#!/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; }