我想将命令的输出发送到STDOUT和变量.我想要结合:
my $var = `some command` ; system( 'some command' ) ;
Tee是朝着正确方向迈出的一步,但是它将它发送到文件而不是变量.我想我可以读取文件,但直接在那里更简单.
两个流的输出是否同时发生?
如果没有,你可以这样做:
my $var = 'cmd' my $output = `$cmd` print STDOUT $output
或者更安全的版本,不涉及调用子shell,并一次打印到STDOUT一行:
sub backtick(@) { my $pid = open(KID, '-|'); die "fork: $!" unless defined($pid); if ($pid) { my $output; while () { print STDOUT $_; $output .= $_; # could be improved... } close(KID); return $output; } else { exec @_; } } my @cmd = ('/bin/ls', '-l'); my $output = backtick(@cmd);
你想要Capture :: Tiny
use Capture::Tiny 'tee'; my $output = tee { system( "some command" ) };
我写这篇文章是为了取代Tee和其他大约20个进行某种捕获的模块,但这些模块在某种程度上存在缺陷.
- xdg(又名dagolden)