问题
A very simple question, but I can't easily find an answer.
I want all say
in a block to go to a file. But then I want my output to return to STDOUT
. How to do that?
my $fh_foo = open "foo.txt", :w;
$*OUT = $fh_foo;
say "Hello, foo! Printing to foo.txt";
$*OUT = ????;
say "This should be printed on the screen";
回答1:
The simple answer is to only change it lexically
my $fh-foo = open "foo.txt", :w;
{
my $*OUT = $fh-foo;
say "Hello, foo! Printing to foo.txt";
}
say "This should be printed on the screen";
my $fh-foo = open "foo.txt", :w;
with $fh-foo -> $*OUT {
say "Hello, foo! Printing to foo.txt";
}
say "This should be printed on the screen";
If you have to work around someone else's code you could reopen it the same way it was opened in the first place.
my $fh-foo = open "foo.txt", :w;
$*OUT = $fh-foo;
say "Hello, foo! Printing to foo.txt";
$*OUT = IO::Handle.new( path => IO::Special.new('<STDOUT>') ).open();
say "This should be printed on the screen";
来源:https://stackoverflow.com/questions/47318139/if-i-reassigned-out-in-perl-6-how-can-i-change-it-back-to-stdout