在perl中打印“数组散列哈希”的元素

时间:2014-04-06 13:20:02

标签: perl hash

我需要打印以下“数组散列哈希”(%分区)的元素。  但没有任何印刷品。此外,没有遇到错误。请帮忙

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;

2 个答案:

答案 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}})