in reply to Question: Redirection of stdout to scalar variable

open STDOUT, ">", \$TEMP1;

See my reply to Using a tied scalar as an in memory file for why this generally cannot be used to capture the stdout/stderr output of external programs.

You need to setup pipes both ways to the I/O of the external program, which can for example be achieved with IPC::Open3.  But even in this case it's sometimes non-trivial to get right (due to potential buffering and deadlock problems, depending on how the external program is behaving...).