my $pid = open(CHILD, "-|", 'child', @child_args) if ($pid) { while () { $logger->($_) } } close(CHILD); #### if (my $pid = open(CHILD, "-|")) { while () { $logger->($_); } close(CHILD); } else { open(STDERR, '>&STDOUT'); exec('child', @child_args) || die "exec failed"; }