¿Cómo almacena el resultado a una variable y comprueba el resultado en un condicional?

StackOverflow https://stackoverflow.com/questions/2693975

  •  01-10-2019
  •  | 
  •  

Pregunta

Sé que es posible, pero estoy dibujando un espacio en blanco en la sintaxis. ¿Cómo se hace algo similar a lo siguiente como una condicional. 5.8, por lo que no hay opción Cambiar:

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

Y algo similar a:

while ( my $result = calculate_result() != 1 ) {
    print "Result is $result\n";
}
¿Fue útil?

Solución

Es necesario añadir paréntesis para especificar precedencia que != tiene mayor prioridad que =:

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

Otros consejos

Kemp tiene la respuesta correcta acerca de prioridad. Yo acababa de añadir que hace expresiones complejas que implican ambas asignaciones y comparaciones en una condición de bucle puede hacer que el código ilegible feo y muy rápidamente.

Yo escribiría así:

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

¿Qué hay de malo en:

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

resultados en 1234

estaban cerca ...

while ( (my $result = calculate_result()) != 1 ) {
    print "Result is $result\n";
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top