Вы не можете сделать это с обратными галочками, поскольку они возвращаются в программу Perl только после завершения выполнения.
Итак,
print `command1; command2; command3`;
будет ждать, пока команда3 не завершит вывод чего-либо.
Вы должны использовать трубу вместо бэкстиков, чтобы иметь возможность немедленно получить вывод:
open (my $cmds, "-|", "command1; command2; command3");
while (<$cmds>) {
print;
}
close $cmds;
После того, как вы это сделали, вы должны увидеть, хотите ли вы буферизовать или нет(в зависимости от того, насколько немедленным вы хотите, чтобы вывод был): Страдает от буферизации?
Чтобы напечатать и сохранить вывод, вы можете открыть () файл для записи вывода в:
open (my $cmds, "-|", "command1; command2; command3");
open (my $outfile, ">", "file.txt");
while (<$cmds>) {
print;
print $outfile $_;
}
close $cmds;
close $outfile;