Joh*_*Tan 4 printing string perl file
有没有办法在不重复打印"字符串"代码的情况下同时打印到"显示"和文件中?
我想做的事:
if ($ofile) {
open (FILE, '>>', "file");
print "Hello" #some code#; #prints on the display and into the file
}
Run Code Online (Sandbox Code Playgroud)
代替:
if ($ofile) { open (FILE, '>>', "file"); }
print "Hello";
if ($ofile) { print FILE "Hello"; }
Run Code Online (Sandbox Code Playgroud)
尝试使用谷歌搜索但我发现的只是或者,不是两个功能在一起.
编辑以添加问题:
然后使用IO :: Tee创建一个新的T形手柄,然后选择$ tee,以便print默认使用它. - Eric Strom
@EricStrom创建一个新的T恤手柄是什么意思?你是说这个Local::TeeOutput吗?search.cpan.org/~mschilli/Log-Log4perl-1.34/lib/Log/Log4perl.pm
@EricStrom你有一个例子吗?
@EricStrom Local :: TeeOutput在Strawberry Perl的默认库中不可用.在默认库中是否有任何替代方案?
当然,在CPAN上使用IO :: Tee.
my $tee = IO::Tee->new( \*STDOUT, \*STDERR, $John, $Tan );
print $tee "HELLO!\n";
Run Code Online (Sandbox Code Playgroud)
要更改perl的默认句柄:
select $tee;
print "HELLO!\n";
Run Code Online (Sandbox Code Playgroud)
如果这是用于日志记录,请考虑使用Log :: Log4perl
您可以将相同的东西记录到屏幕,文件甚至数据库中.
这是记录到屏幕和文件的完整示例.
use strict;
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init("INFO");
my $logConfiguration = qq(
log4perl.logger = INFO, Logfile, Screen
log4perl.appender.Logfile = Log::Log4perl::Appender::File
log4perl.appender.Logfile.filename = C:\\temp\\file.log
log4perl.appender.Logfile.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.Logfile.layout.ConversionPattern =%p[%d{MM/dd HH:mm} %3L] %m%n
log4perl.appender.Screen = Log::Log4perl::Appender::Screen
log4perl.appender.Screen.stderr = 0
log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
log4perl.appender.Screen.layout.ConversionPattern = %m%n
);
Log::Log4perl::init( \$logConfiguration );
INFO "This line will be logged";
ERROR "This error will be logged";
LOGDIE "Fatal error will be logged";
Run Code Online (Sandbox Code Playgroud)
配置说明当调用其中任何一个时,将附加文件(Logfile)和屏幕(Screen).INFOERROR
该FAQ涵盖了更多的问题