我正在尝试重定向库函数的输出,而不更改库中的代码:
program.pl
use Lib::xxLib1xx;
...
xxLib1xx::Function1($Arg1);
xxLib1xx.pm
Function1{
my $arg = shift;
print "$arg\n";
}
如何修改program.pl中的代码,这样当我调用Function1时,看不到输出?我无法更改库本身的代码。 如果我进行了系统调用,它看起来像是:
system("echo hello > nul");
答案 0 :(得分:3)
use Capture::Tiny qw[ capture ];
( $stdout, $stderr, @result) = capture { xxLib1xx::Function1($Arg1) };
答案 1 :(得分:3)
不使用CPAN模块的答案仍然非常紧凑:
my $stdout;
{
local *STDOUT;
open STDOUT, ">", \$stdout;
xxLib1xx::Function1($Arg1);
}
print "Got '$stdout' from subroutine call!\n";
答案 2 :(得分:0)
答案 3 :(得分:0)
在shooper回复的帮助下回答:
my $LOG;
open ($LOG, '>>', 'null');
select $LOG;
...
xxLib1xx::Function1($Arg1);
...
select STDOUT;