$parallel_on=='YES'? my $pid = $pm->start and next; :0;
Там много чего не так. Во-первых, есть лишняя точка с запятой; избавиться от этого.
$parallel_on=='YES'? my $pid = $pm->start and next :0;
Далее, =
и and
имеют более низкий приоритет, чем?:, Поэтому вам нужно заключить истинное условие в скобки:
$parallel_on=='YES'? (my $pid = $pm->start and next) :0;
В этот момент он скомпилируется, но все равно не работает. == для числовых сравнений, а 'YES', будучи строкой, не начинающейся с цифр, имеет числовое значение 0, поэтому условие почти всегда будет выполнено. (Например, 'NO' == 'YES' сравнивает 0 == 0, что верно.) Вместо этого используйте eq:
$parallel_on eq 'YES'? (my $pid = $pm->start and next) :0;
Следующая часть, я не уверен, как вам помочь, так как я не уверен, как выглядит остальная часть вашего кода. my $pid
объявляет новую лексику с областью видимости до конца вмещающего блока, но как только вы присваиваете ей, вы используете next
для выхода (и, возможно, повторного входа) в блок, теряя тем самым значение, сохраненное в $ ПИД-регулятор. Вы, вероятно, хотите объявить $ pid перед блоком.
my $pid;
...
$parallel_on eq 'YES'? ( $pid = $pm->start and next) :0;
Теперь у вас есть 0;
времяпровождения, бесполезно, когда условие ложно. Избавьтесь от этого:
if ( $parallel_on eq 'YES' ) { $pid = $pm->start and next }
Если вы не хотели присвоить его $ pid, когда условие ложно?
$pid = $parallel_on eq 'YES' ? $pm->start : 0 and next;