当我使用Date :: Manip的sortByLength时,为什么会出现“未初始化的值”警告?

时间:2009-08-12 02:33:35

标签: perl warnings

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.

3 个答案:

答案 0 :(得分:2)

问题实际上并不在那里;只使用无效(undef)参数调用该函数。要更好地了解它的来源,请尝试以下方法:

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

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

答案 1 :(得分:1)

$a$b都是undef。检查要输入的列表,使用此子例程查看是否有未定义的值。

您是如何使用此代码的?

答案 2 :(得分:0)

如果启用了未初始化诊断的警告(可能通过毯子-wuse 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都未初始化。没有更多的背景,很难说。