2009-08-12 35 views
0

怎么可能在日期/ Manip.pm的代码块从Date::Manip模块:当我使用Date :: Manip的sortByLength时,为什么会得到“未初始化值”警告?

#*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. 
+3

这是一个警告,而不是一个错误,它可以通过不传递“undef”到该函数来解决。 – jrockway 2009-08-12 02:40:06

回答

0

如果被启用未初始化诊断警告(可能通过毯子-wuse warnings;),如果sortByLength以某种方式称为正常子程序,而不是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$b是未初始化的。很难说没有更多的上下文。

2

问题实际上并不在那里;该函数只是被称为无效(undef)参数。为了得到它来自哪里更好的跟踪,试试这个:

$SIG{__WARN__} = sub { 
    require Carp; 
    Carp::confess("Warning: $_[0]"); 
}; 

这将打印堆栈跟踪的所有警告。

1

$a$b都是undef。检查您正在馈送给使用此子例程的排序列表,看看您是否有未定义的值。

你是怎么使用这段代码的?

相关问题