我使用下面的perl脚本,
open (STDOUT, '>',"log.txt")|| die "ERROR: opening log.txt\n";
print "\n inside";
close (STDOUT);
print "\noutside";
我需要字符串“inside”需要在log.txt中打印。字符串“outside”需要在控制台中打印。
但是我的脚本字符串“inside”打印在log.txt中,但字符串“outside”不会打印在控制台上。
谁可以帮我这个事
你redirect the standard output stream到open STDOUT, '>', $file
文件。之后,没有简单的方法可以打印到控制台。
一些打印到文件和控制台的方法
STDOUT
,并在需要时稍后恢复它。再次,请参阅open
open SAVEOUT, ">&STDOUT" or warn "Can't dup STDOUT: $!";
open *STDOUT, ">", $logfile or warn "Can't redirect STDOUT to $logfile: $!";
say "goes to file";
...
open STDOUT, ">&SAVEOUT" or warn "Can't reopen STDOUT: $!"; # restore
say "goes to console";
open my $fh_so, '>', \my $for_stdout;
select $fh_so;
say "goes to variable \$for_stdout";
say STDOUT "goes to console";
...
select STDOUT; # make STDOUT default again
say $for_stdout; # goes to console (all accumulated $fh_so prints)
有了这个你可以通过指定STDOUT
到达控制台,否则一旦你select
回到STDOUT
你就会把所有STDOUT打印的打印出来open my $fh_log, '>', $logfile or die "Can't open $logfile: $!";
say $fh_log "goes to $logfile";
say "goes to console";
...
close $fh_log;
默认的print
(或者更确切地说是say
)继续进入控制台前两个看起来有点麻烦,不是吗。我建议将日志直接打印到日志文件,除非STDOUT
需要重定向到大部分程序,或者你有一个令人信服的理由select
文件句柄。
对于say
,它为打印的内容添加了换行符,你需要在开头使用use feature 'say';
。
始终使用use warnings;
和use strict;
开始您的程序。