日期: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.发布于 2009-08-12 02:47:45
问题实际上并不在那里;函数只是用无效的(undef)参数调用。要更好地跟踪它的来源,请尝试如下:
$SIG{__WARN__} = sub {
require Carp;
Carp::confess("Warning: $_[0]");
};这将打印所有警告的堆栈跟踪。
发布于 2009-08-12 08:37:58
$a或$b都是undef。检查要输入到使用此子例程的排序的列表,以查看是否有未定义的值。
你是如何使用这段代码的?
发布于 2009-08-12 02:46:44
如果启用了未初始化的诊断警告(可能是通过毯子-w或use 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都是未初始化的。没有更多的背景就很难说了。
https://stackoverflow.com/questions/1263943
复制相似问题