2009-11-30 5 views
-1

Je voudrais obtenir une solution pour un problème sur le programme Perl.Comment résoudre cette erreur de syntaxe lors de l'utilisation de l'opérateur conditionnel Perl?

$parallel_on=='YES'? my $pid = $pm->start and next; :0; 

Je veux être la déclaration comme ceci. mais je ne suis pas résolu. Est-ce que quelqu'un peut résoudre ce problème?

+3

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

Répondre

10
$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; 
4

Le? : la syntaxe est pour assigner aux variables, pas pour faire une ligne si des déclarations. Puisque vous utilisez deux instructions dans la partie vraie de la condition, faites-nous une faveur et utilisez une vraie instruction if. C'est plus propre et vous ne perdez pas 5 minutes à demander comment le faire en SO.

my $pid = 0; 

if ($parallel_on eq 'YES') { 
    $pid = $pm->start; 
    next; 
} 
+1

c'est une approche plus propre – Ram

+1

Cela aurait pu être dit avec '- $ snarkiness', cependant. –

Questions connexes