Question

Je m'attendrais à ce que le bloc de la deuxième instruction "if" soit entré à cause de la valeur undef mais les journaux indiquent qu'il n'est pas entré.

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()"];
}

Le fichier journal indique:

[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()

Toutes les idées acceptées avec reconnaissance.

Modifier: Désolé, j'avais modifié le code pour afficher le flux de base. J'aurais dû le relire un peu mieux.

  • J'ai ajouté le $ ret dans getcmd () pour simuler ce qui se passe dans la fonction de journalisation qui affiche simplement la valeur actuelle de $ ret, qui est une variable globale toujours utilisée pour capturer les valeurs de retour.
  • J'avais coupé les messages du journal et raté le " retour "

Merci pour les suggestions et les commentaires. Je n'avais pas remarqué la différence de six secondes entre les horodatages des journaux, alors je suppose que vous avez raison de dire que la séquence d'exécution est différente de ce à quoi je m'attendais initialement.

Je vais revenir en arrière et regarder à nouveau. J'imagine que c'est ce que vous obtenez lorsque vous essayez de regarder la & "Moyenne" de quelqu'un d'autre & "; Après une journée de treize heures, Perl essayait de terminer les choses pour un & Quot; doit être mis en ligne le lundi & "; projet!

Je n'ai pas écrit le code, je l'ai simplement hérité. Le code a été écrit par quelques personnes qui pensent ne pas & "Ne pas avoir besoin d’avertissements ni de restrictions strictes &";

.

Imaginez 800 lignes de Perl et beaucoup de «si» mais pas d’autre déclaration! Pas de codage défensif du tout! 8-O

Encore merci de votre aide.

acclamations,

Était-ce utile?

La solution

Je pense que quelque chose de plus compliqué se passe ici - ces messages de journal semblent être espacés de 6 secondes, et il est impossible que cela prenne 6 secondes pour l'instruction push, le retour et la vérification if.

Le premier message du journal provient-il d'un précédent appel de la méthode depuis un autre endroit de l'application?

Autres conseils

Réduit au strict minimum, cela affiche & "undef détecté &";

.
#!/bin/perl -w

use strict;

sub getcmd
{
    return undef;
}

my $ret;

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

Par conséquent, votre problème est probablement que $ self - > getcmd () ne renvoie pas undef, même si vous pensez que cela devrait être le cas.

Utilisez le débogueur de Perl (perl -d) pour parcourir le code et voir ce qu'il en est. passe. Lors du débogage du code, il est important de libérer votre esprit de toute hypothèse.

De plus, ces lignes sont indispensables au-dessus de tout programme Perl:

use strict;
use warnings;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top