打印重定向到多个输出目标

时间:2013-03-27 16:30:27

标签: perl io-redirection filehandle

我正在寻找一种方法来减少某些脚本中的print混乱。我想要一些输出到一个文件,一些到屏幕,一些到两个。它是"有些人和#34;那是在逃避我。有没有办法打开一个 FILEHANDLE ,它将同时转到STDOUT和已经open的文件?

这样的事情:

open ($file_only, ">", "$logfile");
open ($file_and_term, .....);


print $file_and_term "Nice stuff for the user to see\n";
print $file "$some_command\n";
print $file `$some_command`;   
$debug && print $file "some debug info goes here, too\n";
print "Hey, good job! You're done!\n"

我的目标是发送到$file_and_term的行不会是双行,一行转到$file,一行转到STDOUT。并且基于调试级别使其更具动态性,可能使用由调试级别控制的select语句。


因此,在编写上述内容时,我确实想出了一个符合我需求但不符合我需求的解决方案。 :)所以当我实现我不同优雅的解决方案时,我会发布这个问题。


我最终做到了这一点......它没有普通print那么好,但是我可以让它在以后变得更强大......

sub printit {
    my ($opt, $text) = @_;
    if ($opt == $FILE || $opt == $BOTH) {print $LOG $text}
    if ($opt == $TERM || $opt == $BOTH) {print $text}
}      

1 个答案:

答案 0 :(得分:0)

根据an answer to an earlier question的建议,您可以使用IO::Tee并说出

my ($file, $file_and_term);
open $file, '>', $logfile;
$file_and_term = IO::Tee->new( $file, \*STDOUT );