首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我在使用日期::Manip的sortByLength时会收到“未初始化值”警告?

为什么我在使用日期::Manip的sortByLength时会收到“未初始化值”警告?
EN

Stack Overflow用户
提问于 2009-08-12 02:33:35
回答 3查看 1.5K关注 0票数 0

日期:Manip模块中的Date/Manip.pm代码块是如何实现的:

代码语言:javascript
复制
#*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";

我收到警告:

代码语言:javascript
复制
Use of uninitialized value in length at /perl/lib/perl5.8/Date/Manip.pm line 244.
EN

回答 3

Stack Overflow用户

发布于 2009-08-12 02:47:45

问题实际上并不在那里;函数只是用无效的(undef)参数调用。要更好地跟踪它的来源,请尝试如下:

代码语言:javascript
复制
$SIG{__WARN__} = sub {
  require Carp;
  Carp::confess("Warning: $_[0]");
};

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

票数 2
EN

Stack Overflow用户

发布于 2009-08-12 08:37:58

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

你是如何使用这段代码的?

票数 1
EN

Stack Overflow用户

发布于 2009-08-12 02:46:44

如果启用了未初始化的诊断警告(可能是通过毯子-wuse warnings;),如果sortByLength作为正常的子例程被调用,而不是作为sort {}函数调用,那么您可能会看到这个错误:

代码语言:javascript
复制
$ 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都是未初始化的。没有更多的背景就很难说了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1263943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档