#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
use POSIX qw{mkfifo};
use Time::HiRes qw{usleep};
my $named_pipe = "pm_1085515_$$.fifo";
unlink $named_pipe if -e $named_pipe;
if (fork) {
my $timeout = 2;
local $SIG{ALRM} = sub { die "Timed out after $timeout seconds" };
alarm $timeout;
usleep 1e3 until -p $named_pipe;
alarm 0;
open my $writer, '>', $named_pipe;
print $writer "$_\n" for qw{B D C A};
close $writer;
wait;
unlink $named_pipe;
}
else {
open my $sorter, '|-', 'sort';
mkfifo $named_pipe, 0600;
open my $reader, '<', $named_pipe;
print $sorter $_ while <$reader>;
close $reader;
close $sorter;
}
####
B
D
C
A
####
A
B
C
D