Is there any way to print both onto the "display" and also into a file at the same time without repeating the print "string" code?
What I want to do:
if ($ofile) {
open (FILE, '>>', "file");
print "Hello" #some code#; #prints on the display and into the file
}
instead of:
if ($ofile) { open (FILE, '>>', "file"); }
print "Hello";
if ($ofile) { print FILE "Hello"; }
Tried googling but all I found was either or, not both features together.
Edit to add questions:
Then use IO::Tee to create a new tee'd handle, and then select $tee so that print uses it by default. – Eric Strom
@EricStrom What do you mean by create a new tee'd handle? Do you mean this Local::TeeOutput
? search.cpan.org/~mschilli/Log-Log4perl-1.34/lib/Log/Log4perl.pm
@EricStrom Do you have an example?
@EricStrom Local::TeeOutput is not available in the default library for Strawberry Perl. Is there any alternative that's inside the default library?
Sure, with IO::Tee on CPAN.
To change perl's default handle:
If this is for logging, Consider using Log::Log4perl
You can have the same stuff log to the screen , file and even a database.
This is a complete example of logging to both the screen and a file.
The configuration illustrates that both a file (Logfile) and the screen (Screen) will be appended when either
INFO
,ERROR
etc are called.The FAQ covers more questions
Why not make subroutine for the task?
Also, many logging packages like Log::Log4perl support writing to both console and the file via quite simple configuration.
See Printing to multiple file handles with one request and IO::MultiHandle - Operate on multiple file handles as one over at perlmonks.