2010-01-04 32 views
1

我继承了一些Perl代码,使一个Web服务调用微软的MapPoint wbeservice,但最近升级后,它开始与以往神秘的失败:当我调用new()时,为什么WebService :: Mappoint会抱怨“不是HASH引用”?

不是在/ usr/lib目录散列引用/的perl5/SITE_PERL/5.8.0/WebService的/ Mappoint.pm线35

没有张贴模块的完整代码(毕竟,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来解决问题,但是为什么这会导致问题,我有点难以忍受,尽管我认为你只能祝福哈希,而且这似乎是一个匿名数组?

回答

3

它看起来像使用pseudo-hashes。数组引用存储在$self中,但稍后将其用作散列引用。伪哈希现在已被弃用。我建议你修补模块以使用正常的哈希。不知道它是否会有所帮助:

my $self = bless { %{"${class}::FIELDS"} }, $class; 
相关问题