说我们有这个模块:
unit module outputs;
say "Loaded";
我们这样加载它
use v6;
use lib ".";
require "outputs.pm6";
在require
d时将打印“已加载”。假设我们要捕获已加载模块的标准输出。如果it's an external process,我们可以这样做,但是似乎没有一种方法可以将*OUT
重定向到字符串,或者如果不可能的话,重定向到文件。是吗?
答案 0 :(得分:8)
您可以尝试使用IO::String
:
use v6;
use lib ".";
use IO::String;
my $buffer = IO::String.new;
with $buffer -> $*OUT {
require "outputs.pm6";
};
say "Finished";
print ~$buffer;
输出:
Finished
Loaded
另请参阅If I reassigned OUT in Perl 6, how can I change it back to stdout?
答案 1 :(得分:7)
临时重新分配$*OUT
,以便.print
调用追加到字符串:
my $capture-stdout;
{
my $*OUT = $*OUT but
role { method print (*@args) { $capture-stdout ~= @args } }
require "outputs.pm6" # `say` goes via above `print` method
}
say $capture-stdout; # Loaded