perl之"tee"qx 运算符

sky-heaven 阅读:59 2024-06-20 12:54:19 评论:0

我正在编写一个脚本,目前有:

my @files = `$some_command`; 
print @files; 
chomp @files; 
foreach my $file (@files) 
{ 
    process($file); 
} 

它工作正常,但 some_command 部分占用了脚本的大部分时间。在那段时间里,stdout 上什么也没有出现,因为 Perl 已经重定向了 some_command 的输出来填充 @files 数组。只有在 some_command 完成并且 Perl 继续执行 print @files; 时才会打印它。

是否有一些巧妙的方法可以更改此代码,以便 some_command 的输出在执行时出现?我也许可以使用 tee(1) 尝试这样的事情:

my $tmpfile = File::Temp->new(); 
system("$some_command | tee " . $tmpfile->filename); 
my @files; 
{ local $/ = undef; @files = split /\s/, <$tmpfile>; } 

但如果有更简单的解决方案,我宁愿避免使用临时文件。

请您参考如下方法:

您可以在打印行的同时自己打开句柄并手动填充数组。

这样的事情可能会奏效,

  open my $fh, '-|', $some_command; 
  while(<$fh>) 
  { 
    print $_; 
    push @files, $_; 
  } 
  close $fh; 


标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号