Comment résoudre l'erreur suivante: “non défini sous-programme &:: resetCounters appelé à”?
Comment résoudre l'erreur suivante: "non défini sous-programme &:: resetCounters appelé à"? La sous-routine a été prototypée mais encore Perl se plaint. Le code suivant est ce que je vais avoir des problèmes avec:
#!/usr/bin/perl
use strict;
use warnings;
...
sub reportStats();
sub resetCounters(); #HERE IS THE PROTOTYPE
sub getUpperBusTimeStampAndBatchSize($);
sub toMs($);
sub tibTimeToMs();
sub calcStdDev();
...
print "\nTimeStamp TPS MPS MaxBat AvgBat MaxLat AvgLat StdLat >5ms %>5ms\n";
resetCounters(); #THIS IS THE LINE CONTAINING THE ERROR
...
sub resetCounters()
# -----------------------------------------------------------
# resets all metrics counters
# -----------------------------------------------------------
{
$tps = 0;
$mps = 0;
$batch = 0;
$maxBatch = 0;
$avgBatch = 0;
$latency = 0;
$latencySum = 0;
$maxLatency = 0;
$avgLatency = 0;
$overThreshold = 0;
$percentOver = 0;
$currentSecond = $second;
@latencies = ();
}
swag --- êtes-vous manque le module qui contient la fonctionnalité manquante? Merci de poster un complet minimal de cas de test qui reproduit l'erreur.
Quelle version de Perl utilisez-vous? Un minimum de cas de test fonctionne pour moi sous 5.14.2.
Votre code semble fonctionner ici. Êtes-vous sûr resetCounters n'est pas indéfini quelque part? Je serais tenté de sauter dans le débogueur Perl et trouver quand resetCounters obtient pas défini.
Les prototypes sont complètement inutiles et Considéré comme Nocif. Vous êtes également à l'appel de la sous avec des parenthèses de sorte que même la déclaration anticipée est inutile.
Peut-être il ya un
Quelle version de Perl utilisez-vous? Un minimum de cas de test fonctionne pour moi sous 5.14.2.
Votre code semble fonctionner ici. Êtes-vous sûr resetCounters n'est pas indéfini quelque part? Je serais tenté de sauter dans le débogueur Perl et trouver quand resetCounters obtient pas défini.
Les prototypes sont complètement inutiles et Considéré comme Nocif. Vous êtes également à l'appel de la sous avec des parenthèses de sorte que même la déclaration anticipée est inutile.
Peut-être il ya un
__END__
jeton à l'intérieur de cette troisième yada opérateur. Ou sans terminaison de chaîne, expression régulière, pod, etc.OriginalL'auteur Matt Pascoe | 2012-01-05
Vous devez vous connecter pour publier un commentaire.
Je ne peux pas dire pour sûr que c'est le problème, mais vous devriez regarder dans le
subs
pragma pour predeclaring vos fonctions.Vite ...
En outre, étant donné que ce type de procédure de commande est susceptible de se produire en tant que sa propre déclaration, il n'a vraiment pas besoin d'un nul prototype, ou d'un prototype.
OriginalL'auteur Joel Berger
Le prototype n'est pas obligatoire sauf lorsque la sous-routine a parenthèses. Si vous n'incluez pas les parenthèses puis il n'y a pas de problème. Le code devrait ressembler à:
OriginalL'auteur Matt Pascoe
Qui est bizarre.
Je serais plus enclin à croire que quelque chose ne marche pas en silence avant de resetCounters est en cours de définition, mais alors, "strict" devrait l'en empêcher.
Avez-vous essayé d'utiliser l'esperluette?
[MODIFIER]
Le seul endroit où j'ai vu quelque chose de similaire avec la CARPE.
Quelque chose dans le script n'est pas de compiler, de sorte que le début de l'énoncé ne se compile pas, et vous obtenez une erreur, plutôt qu'à partir du code qui a échoué.
&
est une solution de contournement ou de diagnostic, pas une solution.OriginalL'auteur mmrtnt