我有两个包裹。一个包中有一个哈希。我想将此哈希传递给另一个包中的方法,操纵它并在前一个包中查看结果。这是我的代码: {
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";
}
}
但我看不到哈希的变化。有什么帮助吗?
答案 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。