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