我需要打印以下“数组散列哈希”(%分区)的元素。 但没有任何印刷品。此外,没有遇到错误。请帮忙
our %partitions;
sub partition{
my %set;
my @array;
for(my $i=0;$i<$pop_size;$i++)
{
for(my $j=0;$j<$min_PR;$j++)
{
@array=();
for(my $k=0;$k<$tot_nodes;$k++)
{
if($population[$i]{$k} eq $j)
{
push @array, $k;
}
}
$set{$j} = [@array];
}
$partitions{$i} = [%set];
}
foreach $p (sort keys %partitions)
{
print "$p {\n";
while (my ($r, $s) = %{$partitions->{$p}}) # Error in this line
{ # Not entering this loop
print "$r {\n";
print "value: @$s \n";
print "}\n";
}
}
}
partition;
答案 0 :(得分:1)
看起来您可以从perlreftut中受益,因为您的代码中存在一些可以使用修复的奇怪内容。
$partitions{$i} = [%set];
这会创建一个包含散列%set
的展平版本的数组引用,这可能不是您想要的。我想你可能就是这个意思:
$partitions{$i} = { %set };
但我也认为应该在外部循环中声明%set
。
(在进一步阅读时,也许你 意味着要压扁它。)
这一行:
while (my ($r, $s) = %{$partitions->{$p}}) # Error in this line
应该是:
while (my ($r, $s) = each %{$partitions{$p}})
答案 1 :(得分:1)
我认为这可行..:
改变这个:
while (my ($r, $s) = %{$partitions->{$p}})
为此:
my $ref = \%partitions;
while (my ($r, $s) = %{$ref->{$p}})
或者这个:
while (my ($r, $s) = %{${\%partitions}->{$p}})