Передача хешей из пакета методу в другой пакет и манипулирование им в Perl - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть два пакета.В одном пакете есть один хеш.Я хочу передать этот хэш методу из другого пакета, манипулировать им и увидеть результаты в предыдущем пакете.Вот мой код: {

package Statistical_Analysis;
use Moose;
our $data;
our $ref;
our $k;
our $v;
sub countUseCase
{
    my ($self, $value, $hash) = @_;
    print "Passed value: ".$value."\n";
    print "Hash Address: ".$hash."\n";
    $self->{ref} = $hash;
    $self->{%$ref}{'country'} = "something";
    #print "IP Address: ".$self->{data}."\n";
    #print "Hash Value: ".$self->{ref{'ip_count'}}."\n";
}

}

{
package Parse;
use Moose;
our %ip_address;
sub getFields
{
    our $stanalyze_obj = Statistical_Analysis->new();
       my $ref = \%ip_address;
       $stanalyze_obj->countUseCase($ref);
       dispHashMap();
}

sub dispHashMap
{
    print \%ip_address."\n";
    while ( my ($k,$v) = each %ip_address )
    {
     print "$k => $v\n";
    }

}

Но я не вижу изменений в хэше.Любая помощь?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Вы не видите никаких изменений, потому что вы никогда не меняете их. Поскольку это не имеет смысла, я полагаю, вы хотели изменить $ip_address{country}, когда вы делаете

 $self->{%$ref}{'country'} = 'something';

Если так, то должно быть

 $hash->{country} = 'something';

Конечно, $hash хранится в $self->{ref}, поэтому вы также можете использовать

 $self->{ref}->{country} = 'something';

, который можно сократить до

 $self->{ref}{country} = 'something';

PS & mdash; Что со всеми our переменными? Вы почти никогда не должны использовать our. @ISA и @EXPORT_OK - это единственное, что я могу придумать. Все это должно быть my.

PSS & mdash; На самом деле, почти ничего из этого не должно существовать вообще. Что с объявлением переменных, которые вы даже не используете? Одно из этих заявлений делает вашу ошибку намного менее очевидной.

1 голос
/ 20 сентября 2011

Похоже, вы вызвали countUseCase только с одним параметром, $ref. При вызове этого метода только с одним параметром $hash становится неопределенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...