perl 中怎样判断输出被重定向到文件中了?

perl 中怎样判断输出被重定向到文件中了?

为了方便,写了一个可以在终端输出彩色文字的perl脚本
例如
#!/usr/bin/env perl

use Term::ANSIColor;
print color("red"), "Danger, Will Robinson!\n", color("reset");
print "This is just normal text.\n";
print colored("<BLINK>Do you hurt yet?</BLINK>", "blink");

这个代码在Xterm下执行良好,但是如果我把内容重定向到文件中,数据就不对了,变成了在文本中加入了很多控制字符
^[[31mDanger, Will Robinson!
^[[0mThis is just normal text.
^[[5m<BLINK>Do you hurt yet?</BLINK>^[[0m
怎么才能在程序执行的时候知道用户吧结果重定向到了文件中呢?
程序是输出到标准输出,由shell重定向的,perl代码不知道吧?

(结果文件好像有命令可以转换)
ls-l|grep --color "[0-9]">dummy.txt

grep 带颜色选项后输出到文件就是没有控制字符的

col -b
加了col命令后还是不太对,大侠们帮忙再看看啊

~/lab/perl\>./color.pl  | col -b
31mDanger, Will Robinson!
0mThis is just normal text.
5m<BLINK>Do you hurt yet?</BLINK>0m


QUOTE:
原帖由 ttcn 于 2008-10-31 10:02 发表
加了col命令后还是不太对,大侠们帮忙再看看啊

~/lab/perl\>./color.pl  | col -b
31mDanger, Will Robinson!
0mThis is just normal text.
5mDo you hurt yet?0m

>./color.pl  |  sed 's/^^[[\[0-9]*m//g'

蓝色字符ctrl+v+esc

这个办法可以处理一下输出的文字,但还是不能解决在程序中自动判断输出.难道说Perl的输入参数没有涉及到重定向? grep为啥可以看出来呢,还是grep的彩色字符并非用转义文本实现???


QUOTE:
原帖由 ttcn 于 2008-10-30 12:55 发表
为了方便,写了一个可以在终端输出彩色文字的perl脚本
例如
#!/usr/bin/env perl

use Term::ANSIColor;
print color("red"), "Danger, Will Robinson!\n", color("reset");
print "This is just normal t ...

发现可以用 -t
#!/usr/bin/env perl


use Term::ANSIColor;

if ( -t STDOUT) {
    print color("red"), "Danger, Will Robinson!\n", color("reset");
    print "This is just normal text.\n";
    print colored("<BLINK>Do you hurt yet?</BLINK>", "blink");
} else {
    print "Danger, Will Robinson!\n";
    print "This is just normal text.\n";
    print "<BLINK>Do you hurt yet?</BLINK>";
}
又学了一招 呵呵
ynchnluiti  果然是牛人!!!