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