不能在〜/ modules / Log / Syslog / Constants.pm第28行使用未定义的值作为ARRAY引用。 (F)用作硬参考或符号参考的值必须 是一个定义的值。这有助于揭露一些潜在的错误。 完整代码如下:
package Log::Syslog::Fast::Constants;
use strict;
use warnings;
use Log::Syslog::Constants ();
use Carp 'croak';
require Exporter;
our @ISA = qw(Exporter);
use constant LOG_UDP => 0; # UDP
use constant LOG_TCP => 1; # TCP
use constant LOG_UNIX => 2; # UNIX socket
use constant LOG_RFC3164 => 0;
use constant LOG_RFC5424 => 1;
our @EXPORT = ();
our %EXPORT_TAGS = (
protos => [qw/ LOG_TCP LOG_UDP LOG_UNIX /],
formats => [qw/ LOG_RFC3164 LOG_RFC5424 /],
);
$EXPORT_TAGS{$_} = $Log::Syslog::Constants::EXPORT_TAGS{$_}
for qw(facilities severities);
our @EXPORT_OK = @{ $EXPORT_TAGS{all} } = map {@$_} values %EXPORT_TAGS;
sub AUTOLOAD {
(my $meth = our $AUTOLOAD) =~ s/.*:://;
if (Log::Syslog::Constants->can($meth)) {
return Log::Syslog::Constants->$meth(@_);
}
croak "Undefined subroutine $AUTOLOAD";
}
1;
答案 0 :(得分:0)
问题是由使用与Log::Syslog::Constants
模块不兼容的Log::Syslog::Constants::Fast
模块引起的。
::Fast
模块正在尝试将导入委托给Log::Syslog::Constants
,但是一个或多个委托导入组(列表qw(facilities severities)
之一)不在%EXPORT_OK
中} Log::Syslog::Constants
模块的哈希,意味着::Fast
模块在第27行引入undef
而不是该字段的值。
有两种方法可以实现:
可能性1:有一个不相关的模块自称Log::Syslog::Constants
。
要对此进行调试,请在use Data::Dumper; print Dumper(\%INC);
模块中::Fast
查看Constants.pm
正在加载的内容,并确保其位于其余部分的同一位置Log::Syslog
非快速模块存在。
如果不是,check your module search path并确保它可以找到非::Fast
模块,并且没有任何内容正在修改搜索位置(例如use lib
)以找到某些内容否则在真实事物之前调用自己Log::Syslog::Constants
- 这将导致一个坏模块到"阴影"好的,总是得到加载。
可能性2:您系统上安装的Log::Syslog::Constants
版本与Log::Syslog::Constants::Fast
版本不兼容。
要对此进行调试,请检查Log::Syslog::Constants
的源代码,以确保其%EXPORT_OK
中包含两个委托导入组。
如果不是,请确定是否应升级,降级或更改包源(通常不是一个好主意)来解决问题。它也可以通过升级,降级或更改::Fast
模块的来源来解决;无论你喜欢什么。无论如何,您都需要拥有一个与非::Fast
基本版本兼容的::Fast
包装器。