【发布时间】:2016-12-16 07:44:15
【问题描述】:
不能在 ~/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;
【问题讨论】:
-
这对我来说很好用。你怎么做才能得到这个错误?这个文件的位置,
Constants.pm,正确吗?另一个想法——显然恰好有一个名称完全相同的模块,used byLog::Syslog::Fast。这有关系吗,有冲突吗? -
“为我工作”是指以下内容。我
use这个模块(在文件Constants.pm中放置在Log/Syslog/Fast/中)在一个脚本中,在use Log::Syslog::Fast::Constants qw(:severities)之后我可以打印常量(作为裸词)LOG_DEBUG等。这有帮助吗?
标签: perl perl-module