我想在子进程中压缩输出并只读取stderr.perlfaq8建议做以下事项:
# To capture a program's STDERR, but discard its STDOUT:
use IPC::Open3;
use File::Spec;
use Symbol qw(gensym);
open(NULL, ">", File::Spec->devnull);
my $pid = open3(gensym, ">&NULL", \*PH, "cmd");
while( ) { }
waitpid($pid, 0);
但后来perlcritic
争论使用裸字文件句柄.
我唯一可以设计的是将select
新打开的描述符/dev/null
改为on STDOUT
,如下所示:
# To capture a program's STDERR, but discard its STDOUT:
use IPC::Open3;
use File::Spec;
use Symbol qw(gensym);
open my $null, ">", File::Spec->devnull;
my $old_stdout = select( $null );
my $pid = open3(gensym, ">&STDOUT", \*PH, "cmd");
select( $old_stdout );
while( ) { }
waitpid($pid, 0);
但后来perlcritic
不喜欢使用select
.有更优雅的解决方案吗?