2012-02-11 39 views
2

我想在这里打印出大致的hi!STDERR。这可能与Term::Screen如何使用Term :: Screen打印到STDERR?

#!/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); 
+0

你能不能解释一下那将是有益的?我很难看到你想要做什么。 – Mat 2012-02-11 11:10:39

+0

我想这样做(从'IO :: Interactive'文档):“你也可以传递交互式的可写文件句柄,在这种情况下,如果文件句柄连接到终端,它会写入该文件句柄(而不是writinbg * STDOUT)。再一次,通常的犯罪嫌疑人是* STDERR:“ – 2012-02-12 14:03:24

回答

4

期限::屏幕,看着它的来源,是硬编码写入*STDOUT

例如sub at{}您呼叫,在源中,有这样的:

$this->term()->Tgoto('cm', $c, $r, *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 
相关问题