For the Nth time, don't use local to save/restore file handles, especially the STD* handles. Follow the example in the open documentation for saving and restoring file handles.
A subprocess will inherit and use file descriptors 0, 1, and 2 from the parent process. local *STDOUT; hides away file descriptor 1 and prevents the process from being able to change it (and prevents Perl from doing its normal extra work when STDOUT is re-opened such that file descriptor 1 would be used).
Update: s/file handle (\d)/file descriptor $1/g, etc.