如何解决使用Perl条件运算符时出现的语法错误?

cHe*_*HeE -1 syntax perl

我想在perl程序中获得一个问题的解决方案.

$parallel_on=='YES'? my $pid = $pm->start and next; :0;
Run Code Online (Sandbox Code Playgroud)

我希望成为这样的声明.但我没有得到解决.可以请任何人解决这个问题吗?

yst*_*sth 10

$parallel_on=='YES'? my $pid = $pm->start and next; :0;
Run Code Online (Sandbox Code Playgroud)

那里有很多错误.首先,有一个额外的分号; 摆脱它.

$parallel_on=='YES'? my $pid = $pm->start and next :0;
Run Code Online (Sandbox Code Playgroud)

接下来,=and具有的优先级低于:?,所以你需要附上真实情况括号:

$parallel_on=='YES'? (my $pid = $pm->start and next) :0;
Run Code Online (Sandbox Code Playgroud)

此时,它将编译,但仍然无法正常工作.==用于数字比较,'YES'是一个不以数字开头的字符串,其数值为0,因此条件几乎总是为真.(例如,'NO'=='YES'比较0 == 0,这是真的.)使用eq代替:

$parallel_on eq 'YES'? (my $pid = $pm->start and next) :0;
Run Code Online (Sandbox Code Playgroud)

下一部分,我不知道如何帮助你,因为我不确定你的代码的其余部分是什么样的. my $pid声明一个新的词法,其范围位于封闭块的末尾,但是一旦分配给它,就会使用next退出(并可能重新输入)块,从而丢失存储在$ pid中的值.你可能想在块之前声明$ pid.

my $pid;
...
    $parallel_on eq 'YES'? ( $pid = $pm->start and next) :0;
Run Code Online (Sandbox Code Playgroud)

现在0;,当条件为假时,你有一个闲逛,没有任何目的.摆脱它:

    if ( $parallel_on eq 'YES' ) { $pid = $pm->start and next }
Run Code Online (Sandbox Code Playgroud)

除非您打算在条件为假时将其分配给$ pid?

    $pid = $parallel_on eq 'YES' ? $pm->start : 0 and next;
Run Code Online (Sandbox Code Playgroud)