Это звучит как хороший вариант использования для Forks::Super::bg_qx
.
use Forks::Super 'bg_qx';
$output = bg_qx $bashcommand;
$output1 = bg_qx $bashcommand1;
$output2 = bg_qx $bashcommand2;
$output3 = bg_qx $bashcommand3;
запустит эти четыре команды в фоновом режиме. Переменные, используемые для возвращаемых значений ($output
, $output1
и т. Д.), Являются перегруженными объектами. Ваша программа будет извлекать выходные данные из этих команд (ожидая их завершения при необходимости) при следующем обращении к этим переменным в программе.
... more stuff happens ...
# if $bashcommand is done, this next line will execute right away
# otherwise, it will wait until $bashcommand finishes ...
print "Output of first command was ", $output;
&do_something_with_command_output( $output1 );
@output2 = split /\n/, $output2;
...
Обновление 2012-03-01: v0.60 из Forks :: Super имеет несколько новых конструкций , которые позволяют получать результаты в контексте списка:
if ($condition) {
tie @output, 'Forks::Super::bg_qx', $bashcommand;
tie @output1, 'Forks::Super::bg_qx', $bashcommand1;
tie @output2, 'Forks::Super::bg_qx', $bashcommand2;
tie @output3, 'Forks::Super::bg_qx', $bashcommand3;
}
...