我想在perl程序中找到解决问题的方法。
$parallel_on=='YES'? my $pid = $pm->start and next; :0;
我希望成为这样的声明。但我没有得到解决。 可以请任何人解决这个问题吗?
答案 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;
}