2009-08-12 39 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。檢查您正在饋送給使用此子例程的排序列表,看看您是否有未定義的值。

你是怎麼使用這段代碼的?

相關問題