Как я могу печатать в STDERR с помощью Term :: Screen? - PullRequest
2 голосов
/ 11 февраля 2012

Я хотел бы здесь напечатать жирный шрифт от hi! до STDERR. Это возможно с Term :: Screen ?

#!/usr/bin/env perl 
use warnings;
use 5.12.0;
use utf8;
binmode STDOUT, ':utf8';
binmode STDERR, ':utf8';
use Term::Screen;

my $scr = new Term::Screen;
unless ( $scr ) { die " Something's wrong \n"; }
$scr->clrscr();
$scr->at(5,10)->bold()->puts("hi!")->normal();
$scr->at(11,0);

1 Ответ

4 голосов
/ 11 февраля 2012

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
...