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

时间:2011-09-20 06:02:23

标签: perl methods hash package

我有两个包裹。一个包中有一个哈希。我想将此哈希传递给另一个包中的方法,操纵它并在前一个包中查看结果。这是我的代码: {

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 个答案:

答案 0 :(得分:2)

您没有看到任何更改,因为您从未更改过。因为没有意义,我认为你打算在你做

时更改$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 - 实际上,几乎没有一个应该存在。什么是声明你甚至不使用的变量?其中一个声明就是让你的错误不那么明显。

答案 1 :(得分:1)

您似乎只使用一个参数countUseCase来呼叫$ref。仅使用一个参数调用该方法会导致$hash为undef。