Date::Manip模块中 Date / Manip.pm 中的这段代码如何:
#*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";
我收到了这个警告:
Use of uninitialized value in length at /perl/lib/perl5.8/Date/Manip.pm line 244.
答案 0 :(得分:2)
问题实际上并不在那里;只使用无效(undef)参数调用该函数。要更好地了解它的来源,请尝试以下方法:
$SIG{__WARN__} = sub {
require Carp;
Carp::confess("Warning: $_[0]");
};
这将打印所有警告的堆栈跟踪。
答案 1 :(得分:1)
$a
或$b
都是undef。检查要输入的列表,使用此子例程查看是否有未定义的值。
您是如何使用此代码的?
答案 2 :(得分:0)
如果启用了未初始化诊断的警告(可能通过毯子-w
或use warnings;
),并且 sortByLength 以某种方式被称为正常子例程,而不是{{{ 1}}函数,你可能会看到这个错误:
sort {}
此处我收到两条警告,因为$ perl -Mwarnings=uninitialized -e 'sub sbl { (length $b <=> length $a) } sbl'
Use of uninitialized value in length at -e line 1.
Use of uninitialized value in length at -e line 1.
和$a
都未初始化。没有更多的背景,很难说。