假设我们有这个模块:
unit module outputs;
say "Loaded";
Run Code Online (Sandbox Code Playgroud)
我们这样加载它
use v6;
use lib ".";
require "outputs.pm6";
Run Code Online (Sandbox Code Playgroud)
这将打印出"已加载" require.假设我们想要捕获该加载模块的标准输出.我们可以这样做,如果它是一个外部进程,但似乎没有办法重定向*OUT到一个字符串,或者,如果不可能,重定向到一个文件.是这样吗?
你可以尝试使用IO::String:
use v6;
use lib ".";
use IO::String;
my $buffer = IO::String.new;
with $buffer -> $*OUT {
require "outputs.pm6";
};
say "Finished";
print ~$buffer;
Run Code Online (Sandbox Code Playgroud)
输出:
Finished
Loaded
Run Code Online (Sandbox Code Playgroud)
另请参阅如果我在Perl 6中重新分配OUT,如何将其更改回stdout?
暂时重新分配,$*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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |