Pregunta

Esperaría que se ingrese el bloque en la segunda instrucción 'if' debido al valor undef, pero los registros muestran que no se está ingresando.

sub getcmd{
  my $self = $_[0];
  if ( $self->_recv == OK ){
      push @{$self->{'log'}}, ['NOTICE', "OK"];
      return "My command";          
  }
  push @{$self->{'log'}}, ['ERROR', "Did not get OK back"];
  return undef;
}

...

if (!($ret = $self->getcmd)){
  push @{$self->{'log'}}, ['ERROR', "failed to read after asking for NEXT"];
}
else {
  push @{$self->{'log'}}, ['ERROR', "'undef' not detected in next()"];
}

El archivo de registro muestra:

[Fri May  8 19:25:56 2009]: ERROR: Did not get OK back
[Fri May  8 19:26:02 2009]: ERROR: 'undef' not detected in next()

Cualquier idea aceptada con gratitud.

Editar: Lo siento, había editado el código para mostrar el flujo básico. Debería haberlo corregido un poco mejor.

  • Agregué $ ret en getcmd () para simular lo que sucede en la función de registro que simplemente imprime el valor actual de $ ret, que es una variable global que siempre se usa para capturar valores de retorno.
  • Recorté los mensajes de registro y me perdí el " back "
  • extra

Gracias por las sugerencias y comentarios. No había notado la diferencia de seis segundos en las marcas de tiempo del registro, así que ahora sospecho que tienes razón acerca de que la secuencia de ejecución es diferente de lo que originalmente esperaba.

Volveré y miraré de nuevo. Supongo que eso es lo que obtienes cuando intentas mirar el & Quot; promedio & Quot de otra persona; Perl después de un día de trece horas tratando de terminar las cosas por un & Quot; debe salir en vivo el lunes & Quot; proyecto!

No escribí el código y simplemente lo heredé. El código fue escrito por un par de personas que piensan que no & "; No necesitan advertencias estrictas o estrictos &";

¡Imagina 800 líneas de Perl y muchos 'ifs' pero ninguna otra declaración! ¡Sin codificación defensiva en absoluto! 8-O

Una vez más, gracias por su ayuda.

aplausos,

¿Fue útil?

Solución

Creo que algo más complicado está sucediendo aquí: esos mensajes de registro parecen estar separados por 6 segundos, y no hay forma de que tarden 6 segundos para la declaración push, la devolución y la comprobación if.

¿Hay alguna posibilidad de que el primer mensaje de registro provenga de una llamada anterior del método desde otro lugar de la aplicación?

Otros consejos

Reducido al mínimo, imprime " undef detectado " ;.

#!/bin/perl -w

use strict;

sub getcmd
{
    return undef;
}

my $ret;

if (!($ret = getcmd()))
{
    print "undef detected\n";
}
else
{
    print "undef undetected\n";
}

En consecuencia, su problema es más probable que $ self - > getcmd () no regrese undef, aunque usted piense que debería hacerlo.

Use depurador perl (perl -d) para recorrer el código y ver qué es pasando Al depurar el código, es importante liberar su mente de cualquier suposición.

Además, estas líneas son imprescindibles sobre cada programa perl:

use strict;
use warnings;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top