可能/関連重複:Why do I get "uninitialized value" warnings when I use Date::Manip's sortByLength?Date :: ManipのUnixDateをソートブロックで使用すると、「初期化されていない値」の警告が表示されるのはなぜですか?
このコードブロック:
Use of uninitialized value in length at /.../Date/Manip.pm line 244.
Date::ManipがCPANモジュールである:
my @sorted_models = sort {
UnixDate($a->{'year'}, "%o") <=>
UnixDate($b->{'year'}, "%o")
} values %{$args{car_models}};
は、次エラー警告を発生させる維持。そして、日付のライン244は、::マニピュレータは、次のコードブロックの中に発見された。その後、
# 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";
しかし、ソートするコードのブロックの前に、この(ロガーでコンソールに、実際のUnixの日付値をプリントアウト)を含みます値:
foreach (values %{$args{car_models}}) {
$g_logger->info(UnixDate($_->{'year'},"%o"));
}
は完全にエラー警告を削除しました。どうして?これらすべてのロギングステートメントを実行するのではなく、良い修正は何ですか?
注記:ソートされた値はどれも定義されていません。なぜなら、それらをロガーで印刷したとき、すべての数値が数値であることが分かりました。
$ aと$ bの実際の値を表示するために、ロギングステートメントをソートブロックに置くことはできますか? – zakovyrya
どうすればいいですか? – Kys
また、私はむしろCPANモジュールのコードに触れないでください – Kys