connexes/double possible: Why do I get "uninitialized value" warnings when I use Date::Manip's sortByLength?Pourquoi est-ce que j'obtiens des avertissements de "valeur non initialisée" quand j'utilise UnixDate de Date :: Manip dans un bloc de tri?
Ce bloc de code:
my @sorted_models = sort {
UnixDate($a->{'year'}, "%o") <=>
UnixDate($b->{'year'}, "%o")
} values %{$args{car_models}};
gardé générer l'avertissement d'erreur suivante:
Use of uninitialized value in length at /.../Date/Manip.pm line 244.
Date::Manip est un module CPAN. Et la ligne 244 de Date :: Manip se trouve dans le bloc de code suivant:
# Get rid of a problem with old versions of perl
no strict "vars";
# This sorts from longest to shortest element
sub sortByLength {
return (length $b <=> length $a);
}
use strict "vars";
Mais y compris cette (impression de la valeur de date Unix réelle à la console dans l'enregistreur) avant que le bloc de code pour trier les valeurs:
foreach (values %{$args{car_models}}) {
$g_logger->info(UnixDate($_->{'year'},"%o"));
}
enlevé les avertissements des erreurs entièrement. Pourquoi? Et qu'est-ce qu'une bonne solution au lieu de faire toutes ces déclarations de journalisation? REMARQUE: Aucune des valeurs triées n'est indéfinie car lorsque je les ai imprimées dans l'enregistreur, je pouvais voir que chacune d'entre elles avait une valeur numérique.
Pouvez-vous mettre votre instruction de journalisation dans le bloc de tri pour voir les valeurs réelles de $ a et $ b? – zakovyrya
Comment je fais ça? – Kys
Aussi je ne voudrais pas toucher n'importe quel code dans le module CPAN – Kys