不是Perl中的数组引用错误

时间:2014-12-05 11:13:37

标签: arrays perl

我在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});

2 个答案:

答案 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()是对象方法,而对象实例总是@_数组中的第一个元素。