0

我正在寻找一种方法来减少print我的一些脚本中的一些混乱。我想要一些输出到文件,一些到屏幕,还有一些到两者。是“两者兼得”让我望而却步。有没有办法打开一个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}
}      
4

1 回答 1

0

正如对较早问题的回答所建议的那样,您可以使用IO::Tee并说

my ($file, $file_and_term);
open $file, '>', $logfile;
$file_and_term = IO::Tee->new( $file, \*STDOUT );
于 2013-03-27T17:17:14.880 回答