Verwandte/möglich Duplikat: Why do I get "uninitialized value" warnings when I use Date::Manip's sortByLength?Warum erhalte ich Warnungen "nicht initialisierter Wert", wenn ich Date :: Manips UnixDate in einem Sortierblock verwende?
Dieser Codeblock:
my @sorted_models = sort {
UnixDate($a->{'year'}, "%o") <=>
UnixDate($b->{'year'}, "%o")
} values %{$args{car_models}};
Erzeugung hielt die folgenden Fehler Warnung:
Use of uninitialized value in length at /.../Date/Manip.pm line 244.
Date::Manip ist ein CPAN-Modul. Und Linie 244 von Date :: Manip wird im folgenden Code-Block gefunden:
# 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";
Aber dann einschließlich dieser (Ausdruck der tatsächlichen Unix Date-Wert an die Konsole im Logger) vor dem Code-Block zu sortieren die Werte:
foreach (values %{$args{car_models}}) {
$g_logger->info(UnixDate($_->{'year'},"%o"));
}
entfernt, um die Fehler Warnungen vollständig. Warum? Und was ist eine gute Lösung, anstatt all diese Protokollierungsanweisungen zu machen?
HINWEIS: Keiner der sortierten Werte ist undefiniert, denn wenn ich sie im Logger ausgedruckt habe, konnte ich sehen, dass jeder von ihnen einen numerischen Wert hatte.
Können Sie Ihre Logging-Anweisung in den Sortierblock setzen, um die tatsächlichen Werte von $ a und $ b zu sehen? – zakovyrya
Wie mache ich das? – Kys
Auch würde ich lieber keinen Code im CPAN-Modul – Kys