Welcome to 16892 Developer Community-Open, Learning,Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
1.9k views
Welcome To Ask or Share your Answers For Others

1 Answer

Sure, with IO::Tee on CPAN.

my $tee = IO::Tee->new( *STDOUT, *STDERR, $John, $Tan );
print $tee "HELLO!
";

To change perl's default handle:

select $tee;
print "HELLO!
";

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to 16892 Developer Community-Open, Learning and Share
...