перенаправление stdin / stdout из исполняемого процесса в pipe в Perl

Я пытаюсь заставить STDOUT / STDERR из исполняемого дочернего процесса вернуться к родителю через канал в Perl. Самое близкое, что я видел к тому, что я хочу сделать, это:http://forums.devshed.com/perl-programming-6/exec-and-redirecting-stdout-stderr-168501.html

Ниже приведен упрощенный пример того, что я пытаюсь сделать. Я также попробовал вариант ссылки выше. Я не вижу, что я делаю не так ...

#!/usr/bin/env perl

use strict ;
use warnings ;

my $cmd    = "/usr/bin/who -a" ;  # anything to stdout

pipe( READER, WRITER ) ;
my $child = fork() ;
if ( $child ) {
    print "I am the parent: My pid = $ junior = $child\n" ;
    close( WRITER ) ;
    my @output = <READER> ;
    print @output ;
    print "parent is DONE\n" ;
} else {
    print "I am the child. My pid = $\n" ;

    close( READER ) ;
    close( STDOUT );
    close( STDERR );
    *STDOUT = *WRITER ;
    *STDERR = *WRITER ;

    print WRITER "XXX ouput before exec....\n" ;

    exec( $cmd ) or exit(1) ;
}

Ответы на вопрос(3)

Ваш ответ на вопрос