Как сохранить результат в переменной и проверить результат в условном выражении? - PullRequest
6 голосов
/ 22 апреля 2010

Я знаю, что это возможно, но я рисую пробел в синтаксисе. Как вы делаете что-то похожее на следующее как условное. 5.8, поэтому нет опции переключения:

while ( calculate_result() != 1 ) {
    my $result = calculate_result();
    print "Result is $result\n";
}

И просто что-то похожее на:

while ( my $result = calculate_result() != 1 ) {
    print "Result is $result\n";
}

Ответы [ 4 ]

9 голосов
/ 22 апреля 2010

Вам необходимо добавить скобки, чтобы указать приоритет, так как != имеет более высокий приоритет, чем =:

while ( (my $result = calculate_result()) != 1 ) {
    print "Result is $result\n";
}
2 голосов
/ 22 апреля 2010

Кемп имеет правильный ответ о приоритете. Я бы просто добавил, что выполнение сложных выражений, включающих как присваивания, так и сравнения в условии цикла, может сделать код уродливым и нечитаемым очень быстро.

Я бы написал так:

while ( my $result = calculate_result() ) { 
    last if $result == 1;
    print "Result is $result\n";
}
0 голосов
/ 22 апреля 2010

Вы были близки ...

while ( (my $result = calculate_result()) != 1 ) {
    print "Result is $result\n";
}
0 голосов
/ 22 апреля 2010

Что не так с:

$_ = 1;
sub foo {
   return $_++;
}
while ( ( my $t = foo() ) < 5 )
{
   print $t;
}

результаты в 1234

...