Term :: Screen, смотря на его источник, жестко запрограммирован для записи в *STDOUT
например. sub at{}
что вы звоните, в источнике есть это:
$this->term()->Tgoto( 'cm', $c, $r, *STDOUT );
Следовательно, вам нужно явно перенаправить все STDOUT на STDERR:
open(my $backup_stdout, ">&STDOUT");
close(STDOUT);
open(STDOUT, ">&STDERR"); # This affects ALL of spawned child processes!
# *STDOUT = *STDERR; # This does the same but ONLY affects your process