Почему WebService :: Mappoint жалуется на «не ссылку на HASH», когда я вызываю new ()? - PullRequest
1 голос
/ 05 января 2010

Я унаследовал некоторый код Perl, который выполняет вызов веб-службы для Microsoft Mappoint wbeservice, но после недавнего обновления он начал давать сбой из-за непонятного:

Не ссылка на 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, чтобы пройти, я немного озадачен тем, почему это вызывает проблемы, хотя я думал, что вы можете благословлять только хэши, и это похоже на анонимный массив? 1012 *

1 Ответ

3 голосов
/ 05 января 2010

Похоже на использование псевдо-хешей . Ссылка на массив хранится в $self, но позже она использовалась как ссылка на хеш. Псевдо-хэши теперь устарели. Я предлагаю вам исправить модуль, чтобы использовать обычные хэши. Не уверен, поможет ли это:

my $self = bless { %{"${class}::FIELDS"} }, $class;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...