Я работаю над сценарием, который в настоящее время имеет:
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>; }
Но я бы предпочел избегать временных файлов, если есть более простое решение.