将哈希值从一个包传递给另一个包中的方法,并在Perl中对其进行操作



我有两个包。一个包中有一个散列。我想把这个哈希传递给另一个包中的方法,对它进行操作,并在前一个包中查看结果。下面是我的代码:{

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 => $vn";
    }

}

但是我看不到哈希值的变化。任何帮助吗?

你看不到任何变化,因为你从来没有改变它。由于它没有意义,我假定您是想在

时更改$ip_address{country}
 $self->{%$ref}{'country'} = 'something';

如果是,应该是

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

当然,$hash存储在$self->{ref}中,所以您也可以使用

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

可以缩写为

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

PS本;our变量是怎么回事?你几乎不应该使用our@ISA@EXPORT_OK是我能想到的唯一用途。这些都应该是my

PSS本;实际上,这些几乎都不应该存在。声明你根本不用的变量有什么用?其中一个声明使您的错误不那么明显。

似乎您调用countUseCase只有一个参数,$ref。如果只使用一个参数调用该方法,将导致$hash为undef。

相关内容

最新更新