为什么我会收到“未初始化值”的警告,当我使用日期:: MANIP的sortByLength?(Why

2019-10-17 06:12发布

如何可能在从日期/ Manip.pm代码块日期:: MANIP模块:

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

Answer 1:

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

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

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



Answer 2:

无论是$a$b是联合国民主基金。 检查你喂养到使用这个子程序,看看你是否有一个明确的值排序列表。

你如何使用这个代码?



Answer 3:

如果启用了未初始化诊断警告(可能通过毯-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是未初始化的。 很难说没有更多的上下文。



文章来源: Why do I get “uninitialized value” warnings when I use Date::Manip's sortByLength?
标签: perl warnings