$stdoutes una variable global que representa la salida estándar actual. STDOUTes una constante que representa la salida estándar y suele ser el valor predeterminado de $stdout.
Al STDOUTser una constante, no debe volver a definirla, sin embargo, puede volver a definirla $stdoutsin errores / advertencias (la redefinición STDOUTgenerará una advertencia). por ejemplo, puedes hacer:
$stdout = STDERR
Lo mismo ocurre $stderrySTDERR
Entonces, para responder la otra parte de su pregunta, use las variables globales para redirigir la salida, no las constantes. Solo tenga cuidado de volver a cambiarlo más adelante en su código, la redefinición de variables globales puede afectar otras partes de su aplicación.