in reply to system stdout redirected ok to a file but not to a variable.

Redirection to/from a scalar file handle (any tie'ing file handle actually) does not work for external processes because those perl handlers are not backed by a real file handle at the operating system level.

You can use backticks to capture just one of the subprocess output streams. Or IPC::Open3, and select or any module allowing to handle IO events to read all the streams concurrently, or even some module doing the capturing for you.