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

时间:2009-11-30 09:31:59

标签: perl syntax

我想在perl程序中找到解决问题的方法。

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

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

2 个答案:

答案 0 :(得分:10)

$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中。你可能想在块之前声明$ 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;

答案 1 :(得分:4)

? :语法用于分配变量,而不是用于生成一行if语句。由于您在条件的真实部分中使用了两个语句,请帮助我们并使用真正的if语句。它更干净,你不会浪费5分钟询问如何在SO中做到这一点。

my $pid = 0;

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