bri*_*foy 18
处理这个问题的新方法是使用Capture :: Tiny.您可以通过手术使用它来影响您需要它的程序部分,而不会打扰其他任何事情.但是,我可能会做cjm推荐的,因为它不需要模块.
cjm*_*cjm 13
如果有问题的代码没有明确地使用STDOUT(即,它只是print "..."),您可以使用select更改使用的文件句柄print:
my $output;
open(my $outputFH, '>', \$output) or die; # This shouldn't fail
my $oldFH = select $outputFH;
call_code_that_prints();
select $oldFH;
close $outputFH;
print $output; # Here's what we collected
Run Code Online (Sandbox Code Playgroud)
使用后select可以更轻松地恢复STDOUT.关闭和重新打开STDOUT很难撤消.注意,select这不会影响STDOUT本身,所以它不会影响外部进程,但是你说你没有任何东西.它也不会影响执行类似操作的代码print STDOUT "...".
如果select方法不足以满足您的需求,我建议您尝试Capture :: Tiny.它可以捕获外部程序的输出和明确写入STDOUT的代码.但它(目前)不能仅捕获STDOUT; 它总是捕获STDOUT和STDERR(单独或合并为一个字符串).
| 归档时间: |
|
| 查看次数: |
7992 次 |
| 最近记录: |