2010-01-04 4 views
1

내가 마이크로 소프트의 멥 wbeservice에 웹 서비스 호출을 일부 펄 코드를 계승했지만, 최근 업그레이드 한 후, 그것이 지금까지 비밀로 실패 시작이야 :왜 new()를 호출 할 때 WebService :: Mappoint가 "해시 참조가 아닙니다"라고 불평합니까?

되지는/usr/lib 디렉토리에서 HASH 참조/모듈의 전체 코드를 게시하지 않고있는 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;