$parallel_on=='YES'? my $pid = $pm->start and next; :0;
Il y a beaucoup de mal là-bas. D'abord, il y a un point-virgule supplémentaire; Débarrassez-vous-en.
$parallel_on=='YES'? my $pid = $pm->start and next :0;
Ensuite, =
et and
ont priorité inférieure à:, de sorte que vous auriez besoin de joindre la vraie condition entre parenthèses:
$parallel_on=='YES'? (my $pid = $pm->start and next) :0;
À ce stade, il compilera, mais toujours pas travail. == est pour les comparaisons numériques, et 'OUI', étant une chaîne ne commençant pas par des chiffres, a une valeur numérique de 0, donc la condition sera presque toujours vraie. (Par exemple, « NO » == « OUI » est à comparer 0 == 0, ce qui est vrai.) Utilisation eq au lieu:
$parallel_on eq 'YES'? (my $pid = $pm->start and next) :0;
La partie suivante, je ne suis pas sûr de savoir comment vous aider, puisque je ne suis pas sûr de ce que le reste de votre code ressemble. my $pid
déclare un nouveau lexical, avec une portée à la fin du bloc englobant, mais dès que vous l'attribuez, vous utilisez next
pour quitter (et peut-être ré-entrer) le bloc, perdant ainsi la valeur que vous avez stockée dans $ pid. Vous voulez probablement déclarer $ pid avant le bloc.
my $pid;
...
$parallel_on eq 'YES'? ($pid = $pm->start and next) :0;
Maintenant vous avez un 0;
traîner, ne servant à rien, quand la condition est fausse. Débarrassez-vous de celui-ci:
if ($parallel_on eq 'YES') { $pid = $pm->start and next }
À moins que vous vouliez assigner à $ pid quand la condition est fausse?
$pid = $parallel_on eq 'YES' ? $pm->start : 0 and next;
Le point-virgule heurtant le côlon devrait être assez évident. Pour le dire autrement: il est assez évident que vous avez une déclaration qui dit "': 0' ". – innaM