当我调用new()时,为什么WebService :: Mappoint会抱怨“不是HASH引用”?

时间:2010-01-04 21:54:43

标签: perl compiler-warnings

我继承了一些Perl代码,该代码对微软的Mappoint wbeservice进行了Web服务调用,但是在最近的一次升级之后,它开始失败并且变得神秘:

  

在/usr/lib/perl5/site_perl/5.8.0/WebService/Mappoint.pm第35行不是HASH参考。

如果没有发布模块的完整代码(毕竟,WebService::Mappoint可通过CPAN获得),有问题的行是下面的最后一行:

package WebService::Mappoint;
use SOAP::Lite;
use FileHandle;
use fields qw(ini_file remote_object CustomerInfoHeader UserInfoHeader);
use vars qw(%FIELDS);
use vars qw($VERSION);
$VERSION=0.30;

# @drawmap_EU might be incomplete. It might also contain values that should not be here. Please let me know if there is something wrong
my @EU = (qw(
ad al am at az by ba be bg hr ch cy cz de dk ee es fo fr fi gb ge gi gr hu is ie it lv lt lu mt nl no pl pt ro sk si se tr ua uk yu
));
my %EU;
my %NA = (us=>1, ca=>1, mx=>1);

use strict;

my $ini_files = {};
my ( $user, $password );

my $default_ini_path;

BEGIN {

   $default_ini_path = $^O =~ m/windows/i ? 'c:\mappoint.ini' : '/etc/mappoint.ini';
}

##############################################################################
sub new {
    my ( $class, $proxy_url, $inifile_path ) = @_;

    no strict 'refs';
    my $self = bless [\%{"${class}::FIELDS"}], $class;

虽然我可以选择通过足够的Perl来解决问题,但我有点难以理解为什么会导致问题,虽然我认为你只能祝福哈希,而这似乎是一个匿名数组? / p>

1 个答案:

答案 0 :(得分:3)

看起来像使用pseudo-hashes。数组引用存储在$self中,但稍后用作哈希引用。现在不推荐使用伪哈希。我建议你修补模块使用普通哈希。不确定它是否有帮助:

my $self = bless { %{"${class}::FIELDS"} }, $class;