in reply to Problem dup'ing STDOUT

As Joost points out, system is the correct way to do this, but there is one caveat. Apparently--see 271092--it's not guaranteed that STDOUT is reopened on file descriptor 1 and STDERR on file descriptor 2. Thus it would be safer to code this way:
open (STDOUT, ">$log_dir/$process.log") or die "cannot open log: $!\n" +; if (fileno(STDOUT) != 1) { use POSIX; POSIX::dup2(fileno(STDOUT), 1) or die "dup2: $!\n"; } open (STDERR, ">&STDOUT") or exit 2; flock(STDOUT, LOCK_EX | LOCK_NB) or exit 3;