Как устранить эту синтаксическую ошибку, полученную при использовании условного оператора Perl? - PullRequest
0 голосов
/ 30 ноября 2009

Я хотел бы получить решение проблемы в программе Perl.

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

Я хочу быть таким утверждением. но я не решаюсь Может кто-нибудь решить эту проблему?

Ответы [ 2 ]

10 голосов
/ 30 ноября 2009
$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 перед блоком.

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;
4 голосов
/ 30 ноября 2009

? : синтаксис предназначен для присваивания переменных, а не для создания одной строки в операторах if. Поскольку вы используете два утверждения в истинной части условия, сделайте нам одолжение и используйте реальное выражение if. Это чище, и вы не тратите 5 минут, спрашивая, как это сделать в SO.

my $pid = 0;

if ($parallel_on eq 'YES') {
    $pid = $pm->start;
    next;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...