2010-04-22 16 views

Respuesta

9

es necesario agregar paréntesis para especificar precedencia que != tiene mayor prioridad que =:

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

Eso es todo. Olvidó = devolvió el valor asignado. ¡Gracias! – Oesor

0

¿Qué pasa con:

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

resultados en 1234

2

kemp tiene la respuesta correcta acerca de la precedencia. Solo agregaría que hacer expresiones complejas que involucren tanto asignaciones como comparaciones en una condición de ciclo puede hacer que el código sea feo e ilegible muy rápidamente.

lo escribiría así:

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

Esto tiene un significado diferente al OP. El OP todavía ejecutará el bloque si '$ result' es falso. – mob

+0

Sí, esto realmente está usando DateTime's compare(), que es el sub usado para anular <=> y devuelve -1, 0 o 1. Necesito ejecutar código cuando es -1 o 0 y no cuando 1, y tomar caminos diferentes cuando -1 y 0. while ($ result = compare ($ time_a, $ time_b)) nunca se ejecutaría, básicamente. – Oesor

0

estaban cerca ...

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