我正在寻找一种方法来减少某些脚本中的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}
}
答案 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 );