我在Perl中遇到错误,我无法解决原因。
错误:不是Service.pm,第20行的ARRAY参考
my $array = [ { name => 'George', surname => 'Marley' } ];
my $helper = CustMessage->new();
$helper = CustMessage->getMessage($array);
然后在我的实用程序文件中我有:
sub getMessage {
my ($self, $args) = @_;
my $stringsArray = shift;
my $strings = Service->new({
serviceId => $self->_serviceId(),
});
return unless $strings;
$strings->getStrings($stringsArray);
}
然后在Service方法中:
sub getStrings {
my ($stringsArray, $self) = shift;
my @keys = map({ $_->{'name'} } @{$stringsArray});
my $key = join('', @keys);
$key = MIME::Base64::encode($key);
my %results;
$results{$key} = $self->_callStrings->($stringsArray);
$results{$key}->initialize();
$results{$key} = $self->{serviceCalls}->{getStrings};
return $self->{serviceCalls}->{getStrings};
}
错误位于Service.pm中的getStrings方法的第2行:
my @keys = map({ $_->{'name'} } @{$stringsArray});
答案 0 :(得分:2)
行
my $helper = CustMessage->new();
$helper = CustMessage->getMessage($array);
很奇怪。您正在CustMessage
中创建一个新的$helper
对象,并立即将其丢弃并用
CustMessage->getMessage($array);
除了可能进行的任何继承之外,与
相同getMessage('CustMessage', $array);
我怀疑您没有定义真正的类,因为您将其称为“实用程序文件”
因为getMessage
收到了像这样的论据
my ($self, $args) = @_;
my $stringsArray = shift;
你留下了
($self, $args) = ('CustMessage', $array)
$stringsArray = 'CustMessage'
并且您再也不会使用$args
,因此您的数组引用会丢失。
我不能确定你真正想要的是什么,因为正如我所说,我怀疑你没有合适的CustMessage.pm
文件。但你可以试试
my $helper = CustMessage->new;
my $message = $helper->getMessage($array);
然后
sub getMessage {
my ($self, $stringsArray) = @_;
...
}
答案 1 :(得分:1)
RE:我在Perl中遇到错误,我无法理解为什么。错误:不是Service.pm,第20行的ARRAY参考
尝试
my ($self, $stringsArray) = @_;
而不是
my ($stringsArray, $self) = shift;
# $self is always undef here due one element list assignment
因为getStrings()
是对象方法,而对象实例总是@_
数组中的第一个元素。